在最新的模板约束中,提出了一个用于约束模板参数的新工具集。此外,在C ++中提供了14个变量模板。变量模板允许定义类型参数化常量等。
没有提及这些功能如何互动。使用pi的规范示例我们可以得到:
template<Integral T>
constexpr double pi(3.141592653589793238);
template<Floating_point T>
constexpr T pi(3.1415926535897932384626433832795029L);
这将强制执行C / C ++从integral到double的数字转换。它还可以防止完全不相关类型的实例化。 (看看这个,我们可能希望将Floating_point替换为需要浮点ctor的东西,以支持复杂。)
我是否遗漏了其中一篇论文中的内容,或者这是否正在进行中?也许它是免费的,不值得一提?
答案 0 :(得分:2)
在最新版本的提案(N4040,日期为2014年5月)中,答案为否:
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
- 结束示例]