考虑下面的代码,它试图确定嵌套 typedef 的存在。
#include<type_traits>
struct foo;// incomplete type
template<class T>
struct seq
{
using value_type = T;
};
struct no_type{};
template<class T>
struct check_type : std::true_type{};
template<>
struct check_type<no_type> :std::false_type{};
template<class T>
struct has_value_type
{
template<class U>
static auto check(U const&)-> typename U:: value_type;
static auto check(...)->no_type;
static bool const value = check_type<decltype(check(std::declval<T>()))>::value;
using type = has_value_type;
};
int main()
{
char c[has_value_type<seq<foo>>::value?1:-1];
(void)c;
}
现在调用has_value_type<seq>::value
会导致编译错误,因为无效使用不完整类型seq<foo>::value_type
。是否decltype
需要表达式中的完整类型?如果没有,我该如何消除错误?我正在使用 gcc 4.7 进行编译。