不是类,名称空间或带有模板的枚举

时间:2018-10-08 09:38:32

标签: c++ templates

我正在尝试运行此代码,它将引发错误。我不知道为什么会这样。

#include <iostream>
#include <tuple>
#include <typeinfo>

template <typename... Args>
struct type_list
{
    template <std::size_t N>
    using type = typename std::tuple_element<N, std::tuple<Args...>>::type;
};

template<typename... Ts>
bool foo(unsigned int position)
{
    type_list<Ts...> x;
    return typeid(x::type<0>) == typeid(true);
}

int main()
{
    bool r = foo<int, int>(0);
    std::cout << std::boolalpha;
    std::cout << r;
}

我得到的错误是:

  main.cpp: In function 'bool foo(unsigned int)':
  main.cpp:16:19: error: 'x' is not a class, namespace, or enumeration
   return typeid(x::type<0>) == typeid(true);
               ^

  main.cpp:16:29: error: expected primary-expression before ')' token

   return typeid(x::type<0>) == typeid(true);

1 个答案:

答案 0 :(得分:2)

如错误消息所述,x是一个对象,而不是类,名称空间或枚举。

我想你想要

return typeid(typename type_list<Ts...>::template type<0>) == typeid(true);

或者您可以将xdecltype(自C ++ 11起)一起使用

return typeid(typename decltype(x)::template type<0>) == typeid(true);