模板约束是否可用于变量模板
Will template constraints be available for variable templates?
在最新的模板约束论文中,提出了一个新的工具集来约束模板参数。此外,在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
--结束示例]
相关文章:
- 没有用于初始化C++中的变量模板的匹配构造函数
- 将十六进制值设置为用于填充的字符变量时出现问题
- 与不同变量类型相比,用于变量的 Clang AST 匹配器
- 在一个子程序中输入的变量用于C++中的另一个子程序
- 如何将一个变量用于父类和派生类
- 将其他函数中的变量用于主函数C++
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- 在运行时将更改的环境变量应用于 QApplication
- 输出(用于 GraphViz)提升图顶点及其属性,使用具有私有变量的类作为捆绑属性
- 用于浮点值的最佳变量类型
- 用于在运行时选择变量的 C++ 预处理器指令
- STD ::原子与静态变量用于线程同步
- 为什么保守调整大小不适用于函数中的 Ref 变量?
- 更改用于定义顶点的变量
- 回调函数,用于在同一对象中设置私有变量
- 为什么 std::get 不适用于变量?
- C 编译器可以执行用于返回值的命名const变量的RVO
- TBB Parallel_用于计数,增量变量不准确
- 元组 std::get() 不适用于变量定义的常量
- 模板约束是否可用于变量模板