我也不知道這個(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í)有沒有typename都一樣。
//other public members
private:
index_t first_free_;
};
看起來這段代碼是完全能正常工作的,是吧。可是很不幸的是這代碼在2005上沒法正常通過。
解決的方法很簡(jiǎn)單:
typedef ThreadingModel TM;
typedef TM::thread_safe_type<size_t>::result index_t;
就可以大功告成了。不知道是不是typename的問題。但是從編譯器的出錯(cuò)提示來看并不能和簡(jiǎn)單的typename的問題混為一談。另外,如果這個(gè)thread_safe_type不是模板而只是一個(gè)普通的struct或者typedef的話,也是沒有這個(gè)問題的。
如果有知道這個(gè)問題出現(xiàn)的根本原因的,請(qǐng)指教。