C++ 模板约束是否可用于可变模板?

C++ 模板约束是否可用于可变模板?,c++,c++14,type-constraints,c++-concepts,C++,C++14,Type Constraints,C++ Concepts,在最新的模板约束论文中,提出了一种新的约束模板参数的工具集。此外,在C++中还提供了14个变量模板。变量模板允许定义类型参数化常量等 没有提到这些功能如何交互。使用pi的标准示例,我们可以得到: template<Integral T> constexpr double pi(3.141592653589793238); template<Floating_point T> constexpr T pi(3.141592653589793238462643383

在最新的模板约束论文中,提出了一种新的约束模板参数的工具集。此外,在C++中还提供了14个变量模板。变量模板允许定义类型参数化常量等

没有提到这些功能如何交互。使用pi的标准示例,我们可以得到:

template<Integral T>
  constexpr double pi(3.141592653589793238);

template<Floating_point T>
  constexpr T pi(3.1415926535897932384626433832795029L);
模板
constexpr双pi(3.141592653589793238);
模板
constexpr T pi(3.1415926535897932384626433832795029L);
这将强制C/C++从整数到双精度的数字转换。它还可以防止使用完全不相关的类型进行实例化。(考虑到这一点,我们可能希望用需要浮点ctor的东西来替换浮点,以支持复杂的操作。)


我是不是在某份报纸上漏掉了什么东西,还是这件事正在酝酿中?也许它是免费的,不值得一提?

在最新版本的提案(日期为2014年5月)中,答案是否定的:

5变量模板具有以下限制:

-模板必须是无约束的

-声明的类型必须是bool

-声明必须具有初始值设定项

-初始值设定项应为约束表达式

[示例:

模板
concept bool D1=has_x::value;//确定
模板
concept bool D2=3+4;//错误:初始值设定项不是约束
模板
concept bool D3=has_x::value;//错误:受约束的概念定义
-[结束示例]


根据重新标记。在第一个示例中,您不使用
Integral
模板类型,而且
double
也不是整数。看起来您正在尝试专门化
constexpr
模板。这就是你想要的吗?这与约束有什么关系?你是说概念吗?Concepts Lite在C++14中,但这与您的示例无关。我试图专门化整型变量模板,以将其升级为double(这是库中的数学函数所做的)。也许我把语法弄错了。我想要将积分发送到这个专业化而不是使用它。@ CDMH,概念Lite不是C++的。14@JonathanWakely真正地感谢您的澄清,我认为他们已经做到了。@emsr当前形式的答案可以接受吗,或者我需要解决一些问题吗?
template<typename T>
concept bool D1 = has_x<T>::value; // OK

template<typename T>
concept bool D2 = 3 + 4;           // Error: initializer is not a constraint

template<Integral T>
concept bool D3 = has_x<T>::value; // Error: constrained concept definition