gpt4 book ai didi

C++ 模板特化因非类型参数包而失败

转载 作者:行者123 更新时间:2023-11-30 03:31:03 25 4
gpt4 key购买 nike

我的问题可能与 this one 有关,但我想我这里没有“部分特化的非类型参数表达式”,或者不理解这种关系。

以下代码在 MSVC14 编译器 (CPP11) 中产生内部错误:

template<typename T, T... Elmts>
struct NonTyped
{

};

template<typename T>
struct is_NonTyped_of_type
{
template<typename TL>
static constexpr bool check = false;

template<T... Elmts>
static constexpr bool check<NonTyped<T, Elmts...>> = true;
};

cout << is_NonTyped_of_type<int>::check<NonTyped<int, 5>> << endl;

仅使用一个非类型参数而不是非类型参数包会按预期工作,但这会失败。

这是被标准禁止或未定义的吗?它违反了什么规则?

任何解决方法?

非常感谢!

编辑

solution@StoryTeller 给出实际上不适用于 MSVC14,但对于理解我们这里遇到的问题非常有帮助。非常感谢您的帮助,StoryTeller!

最佳答案

Clang 接受您的代码,而 GCC 不接受。变量模板的部分特化应该没问题。您始终可以返回使用常规类模板进行实际计算的久经考验的方法。

template<typename T>
class is_NonTyped_of_type
{
template<typename TL>
struct check_impl : std::false_type {};

template<T... Elmts>
struct check_impl<NonTyped<T, Elmts...>> : std::true_type {};

public:
template<typename TL>
static constexpr bool check = check_impl<TL>::value;
};

关于C++ 模板特化因非类型参数包而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44522065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com