gpt4 book ai didi

c++ - 是否可以使用 `constexpr` 模板变量作为正式模板参数的默认值

转载 作者:可可西里 更新时间:2023-11-01 16:40:21 26 4
gpt4 key购买 nike

使用 clang 3.6.0,我无法编译以下代码示例。

#include <type_traits>

template <typename T> constexpr bool IS_SCALAR = ::std::is_scalar<T>::value;
template <typename T, bool = IS_SCALAR<T>>
struct Class_Breaks
{
};

template <typename T, bool = ::std::is_scalar<T>::value>
struct Class_Works
{
};

void function()
{
Class_Breaks<int> break_error;
Class_Breaks<int, IS_SCALAR<int>> breaks_ok;
Class_Works<int> ok;
}

但是,返回以下错误消息:

1>  [ 66%] Building CXX object CMakeFiles/Core.dir/tests.cpp.obj
1>D:\Projects\Core\Core\tests.cpp(4,30): error : non-type template argument is not a constant expression
1> template <typename T, bool = IS_SCALAR<T>>
1> ^
1> D:\Projects\Core\Core\tests.cpp(16,18) : note: while checking a default template argument used here
1> Class_Breaks<int> break_error;
1> ~~~~~~~~~~~~~~~~^
1> 1 error generated.

最佳答案

如@StenSoft 所述,它是一个 known bug .如果你需要让它工作因为你有一个你想用作默认值的 constexpr 模板变量,你可以将默认值包装到 std::intergral_constant :

template<
typename T,
bool = std::integral_constant< bool, IS_SCALAR<T> >::value
>

Live example

关于c++ - 是否可以使用 `constexpr` 模板变量作为正式模板参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260489/

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