2015-04-07 3 views
0

Я хочу использовать указатель члена для элемента данных в качестве аргумента шаблона, как в следующем примере:Использование указателя элемента данных в качестве параметра шаблона в MSVC

class Node { }; 

template <typename T, Node T::*member> 
class List { }; 

class Test { 
private: 
    Node node_; 
public: 
    typedef List<Test, &Test::node_> Registry; 
}; 

int main() { } 

Это прекрасно работает с помощью G ++, но Visual Studio Экспресс 2013 жалуется на следующие сообщения об ошибках:

Error 1 error C2327: 'Test::node_' : is not a type name, static, or enumerator c:\temp\msvctest\msvctest\main.cpp 10 1 MsvcTest 
Error 2 error C2065: 'node_' : undeclared identifier c:\temp\msvctest\msvctest\main.cpp 10 1 MsvcTest 
Error 3 error C2975: 'member' : invalid template argument for 'List', expected compile-time constant expression c:\temp\msvctest\msvctest\main.cpp 10 1 MsvcTest 

Как я могу получить Visual Studio, чтобы принять &Test::node_ в качестве параметра шаблона?

+0

Он также компилируется на VS2012: http://webcompiler.cloudapp.net/ –

+0

@WojciechFrohmberg VS действительно становится все хуже ... Возможно, ошибка компилятора тогда? Любые предложения об обходном пути? – zennehoy

+0

не уверен ... Я просто не могу воспроизвести его (у меня нет VS2013 на моей машине) ... –

ответ

Смежные вопросы