KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Updated below . The following is the entire code I have in my main.cpp: template<class T> struct other_traits; template<class T> struct some_traits{ typedef decltype(&T::operator()) Fty; typedef typename other_traits<Fty>::type type; }; int main(){ } But I get the following errors with Visual Studio 2010 while g++ compiles just fine : src\main.cpp(9): error C2146: syntax error : missing ';' before identifier 'type' --src\main.cpp(10) : see reference to class template instantiation ' some_traits<T> ' being compiled src\main.cpp(9): error C2868: ' some_traits<T>::type ' : illegal syntax for using-declaration; expected qualified-name (I like that last one, total wtf.) Can I take that as a bug in VC10 or is there any good reason for the early instantiation? Or is it a bug with decltype that makes the compiler think that Fty is not a dependent name? Update : I tried to cheat the compiler in thinking that Fty is a dependent name using a base class to inherit from: template<class T> struct other_traits; template<class R, class C> struct other_traits<R (C::*)()>{ typedef R type; }; template<class Fty> struct base_traits{ typedef typename other_traits<Fty>::type type; }; template<class T> struct some_traits : public base_traits<decltype(&T::operator())> {}; But the compiler still tries to instantiate / compile everything on the spot, spewing these errors: src\main.cpp(13): error C2039: 'type' : is not a member of 'other_traits<T>' with [ T= ] src\main.cpp(19) : see reference to class template instantiati
Tags (comma-separated)
Save Edits
Cancel