我也不知道這個(gè)能不能算是2005的bug吧,反正我是想不太明白。
今天在對(duì)我的pool使用policy的設(shè)計(jì)的時(shí)候發(fā)現(xiàn)的。
//前面代碼省略
struct single_thread
{
template<class T> struct thread_safe_type
{
typedef boost::add_volatile<T> result;
}
};
template<class ThreadingModel>
struct pool : private ThreadingModel
{
typedef typename ThreadingModel::thread_safe_type<size_t>::result index_t;//其實(shí)有沒(méi)有typename都一樣。
//other public members
private:
index_t first_free_;
};
看起來(lái)這段代碼是完全能正常工作的,是吧。可是很不幸的是這代碼在2005上沒(méi)法正常通過(guò)。
解決的方法很簡(jiǎn)單:
typedef ThreadingModel TM;
typedef TM::thread_safe_type<size_t>::result index_t;
就可以大功告成了。不知道是不是typename的問(wèn)題。但是從編譯器的出錯(cuò)提示來(lái)看并不能和簡(jiǎn)單的typename的問(wèn)題混為一談。另外,如果這個(gè)thread_safe_type不是模板而只是一個(gè)普通的struct或者typedef的話,也是沒(méi)有這個(gè)問(wèn)題的。
如果有知道這個(gè)問(wèn)題出現(xiàn)的根本原因的,請(qǐng)指教。