decltype(some_vector):: size_type不能用作模板参数

Ale*_*mov 4 c++ templates vector decltype c++11

以下类不编译:

template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{   
public:
    std::vector<Key, Allocator> data;
    std::vector<std::pair<std::size_t, decltype(data)::size_type>> order;
};
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

错误:模板参数列表中参数2的类型/值不匹配'template struct std :: pair'


为什么这不能编译,而以下代码工作正常?

template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{   
public:
    std::vector<Key, Allocator> data;
    std::vector<std::pair<std::size_t, std::size_t>> order;
};
Run Code Online (Sandbox Code Playgroud)

krz*_*zaq 9

您需要告诉编译器依赖项size_type确实是一个类型(例如,而不是对象):

template<class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>>
class MyContainer
{   
public:
    std::vector<Key, Allocator> data;
    std::vector<std::pair<std::size_t, typename decltype(data)::size_type>> order;
                                       ^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)

std::size_t 不依赖于模板参数,因此在这方面没有歧义.