【发布时间】:2013-11-11 17:04:57
【问题描述】:
C++14 将允许变量模板:
template <typename T> constexpr T pi = T(3.1415926535897932385);
现在考虑以下情况:
template <typename T = double> constexpr T pi = T(3.1415926535897932385);
问题:如何使用默认参数获取pi?
pi; // Option 1 (I hope...)
pi<>; // Option 2
【问题讨论】:
-
我会假设选项 2,因为这就是老式模板的工作方式。但我还没有详细了解 C++14。
-
函数模板需要避免
<>的原因是,您可以从包含模板和非模板的重载集中进行选择,例如void foo(int); template<class T> void foo(T); foo(2.5);类和变量模板都不需要它——这并不意味着它不会被允许。查看当前草案(github repo 8e1913d3),看来必须使用选项 2。 -
和最新实现的clang仅编译选项2。它说1是不允许的。
标签: c++ templates variables c++14