模板约束是否可用于变量模板

Will template constraints be available for variable templates?

本文关键字:用于 变量 是否 约束      更新时间:2023-10-16

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

没有提到这些功能是如何交互的。使用pi的典型例子,我们可以得到:

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

这将强制C/C++从整数到双精度的数字转换。它还可以防止使用完全不相关的类型进行实例化。(考虑到这一点,我们可能想用需要浮点ctor才能支持复杂的东西来取代Floating_point。)

我是不是在其中一篇论文中遗漏了什么,还是这篇论文正在酝酿中?也许它是免费的,不值得一提?

在最新版本的提案(日期为2014年5月的N4040)中,答案为NO

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

--模板必须不受约束

--声明的类型必须是bool。

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

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

[示例:

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

--结束示例]