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

时间:2013-07-25 18:15:45

标签: 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.1415926535897932384626433832795029L);

这将强制执行C / C ++从integral到double的数字转换。它还可以防止完全不相关类型的实例化。 (看看这个,我们可能希望将Floating_point替换为需要浮点ctor的东西,以支持复杂。)

我是否遗漏了其中一篇论文中的内容,或者这是否正在进行中?也许它是免费的,不值得一提?

1 个答案:

答案 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
  

- 结束示例]