我正在尝试运行此代码,它将引发错误。我不知道为什么会这样。
#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);
答案 0 :(得分:2)
如错误消息所述,x
是一个对象,而不是类,名称空间或枚举。
我想你想要
return typeid(typename type_list<Ts...>::template type<0>) == typeid(true);
或者您可以将x
与decltype
(自C ++ 11起)一起使用
return typeid(typename decltype(x)::template type<0>) == typeid(true);