'std :: is_convertible <argtypes,validtraits> :: value':从属名称不是类型;错误C2059:语法错误:“ ...”

时间:2018-12-10 12:42:54

标签: c++ templates chromium

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;
    }

0 个答案:

没有答案