嵌套名称说明符

aka*_*ihi 17 c++ templates generic-programming

我有一个代码:

namespace mymap {
    template <class Key,template <typename T > class Allocator> myownmap {
        typedef pair<const unsigned int, Key> typename _myPair;
        typedef multimap<unsigned int, Key,less<Key> ,Allocator<_myPair> > typename _entriesType;
    }
}
Run Code Online (Sandbox Code Playgroud)

它在MSVC下成功编译(和工作),但是gcc抱怨语法无效:

.hpp:20: error: expected nested-name-specifier before ‘_myPair’
.hpp:20: error: two or more data types in declaration of ‘_myPair’
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Bo *_*son 27

typename不需要在那里,因此是不允许的.

MSVC在实际使用之前不会正确解析模板,因此直到稍后才会发现某些错误.


Gri*_*yan 6

"预期的嵌套名称说明符"表示在typename关键字之后,您需要使用模板参数的某些嵌套名称typedef typename Key::iterator ....在您的情况下,您不必使用typename.


iam*_*ind 5

typedef pair<const unsigned int, Key> /*typename*/ _myPair;
                                      ^^^^^^^^^^^^ not needed
Run Code Online (Sandbox Code Playgroud)

请参阅此处gcc-4.5 输出。(它适用于myownmap存在class或功能)