1,当我编译铬代码时
template <class ValidTraits, class... ArgTypes>
struct AreValidTraits
: std::integral_constant<
bool,
all_of({std::is_convertible<ArgTypes, ValidTraits>::value...}) > {};
有一些错误:
base\task\task_traits_details.h(169): warning C4346: 'std::is_convertible<ArgTypes,ValidTraits>::value': dependent name is not a type
base\task\task_traits_details.h(169): note: prefix with 'typename' to indicate a type
base\task\task_traits_details.h(171): note: see reference to class template instantiation 'base::trait_helpers::AreValidTraits<ValidTraits,ArgTypes...>' being compiled
base\task\task_traits_details.h(171): error C2059: syntax error: '...'
base\task\task_traits_details.h(169): error C2143: syntax error: missing ';' before '}'
base\task\task_traits_details.h(169): error C2143: syntax error: missing ')' before ';'
base\task\task_traits_details.h(169): error C2143: syntax error: missing '>' before ';'
base\task\task_traits_details.h(169): error C3770: 'unknown-type': is not a valid base class
base\task\task_traits_details.h(169): error C2143: syntax error: missing ',' before ';'
base\task\task_traits_details.h(169): error C2059: syntax error: ')'
2,所以我在'std :: is_convertible'之前添加了'typename',但是问题仍然没有解决,这是修改后的代码:
template <class ValidTraits, class... ArgTypes>
struct AreValidTraits
: std::integral_constant<
bool,
all_of({typename std::is_convertible<ArgTypes, ValidTraits>::value...}) > {};
,同样的错误:
base\task\task_traits_details.h(171): error C2059: syntax error: '}'
base\task\task_traits_details.h(171): note: see reference to class template instantiation 'base::trait_helpers::AreValidTraits<ValidTraits,ArgTypes...>' being compiled
base\task\task_traits_details.h(171): error C2143: syntax error: missing ';' before '}'
base\task\task_traits_details.h(171): error C2143: syntax error: missing '>' before ';'
base\task\task_traits_details.h(171): error C3770: 'unknown-type': is not a valid base class
base\task\task_traits_details.h(171): error C2143: syntax error: missing ',' before ';'
base\task\task_traits_details.h(171): error C2059: syntax error: ')'
似乎修改只是解决了第一个警告。 但是铬代码没问题,我正在使用vs2017编译器。 不知道这些错误是怎么回事?
这是所有功能代码:
// Checks if all of the elements in |ilist| are true.
// Similar to std::any_of for the case of constexpr initializer_list.
inline constexpr bool all_of(std::initializer_list<bool> ilist) {
for (auto c : ilist) {
if (!c)
return false;
}
return true;
}