带默认模板参数的C++14变量模板?
C++14将允许变量模板:带默认模板参数的C++14变量模板?,c++,templates,variables,c++14,C++,Templates,Variables,C++14,C++14将允许变量模板: template <typename T> constexpr T pi = T(3.1415926535897932385); 根据草案,使用将是pi,但这可能会随着时间的推移而改变。仅使用pi,编译器可能无法像编写这样的函数那样推断pi的类型:模板void foo;像这样使用:foo 对于默认参数,它应该像函数一样工作,所以它应该是pi 基于我会说pi;。在当前的标准模板中,参数推导(能够做pi是的一种形式)仅适用于函数。由于论文中完全没有提到TAD
template <typename T> constexpr T pi = T(3.1415926535897932385);
根据草案,使用将是pi,但这可能会随着时间的推移而改变。仅使用pi,编译器可能无法像编写这样的函数那样推断pi的类型:模板void foo;像这样使用:foo
对于默认参数,它应该像函数一样工作,所以它应该是pi 基于我会说pi;。在当前的标准模板中,参数推导(能够做pi是的一种形式)仅适用于函数。由于论文中完全没有提到TAD,因此他们不太可能使用它。我假设选项2,因为这就是它在旧式模板中的工作方式。但是我还没有详细研究过C++14。函数模板需要避免的原因是,您可以从包含模板和非模板的重载集中进行选择,例如void fooint;模板空心脚;第2.5条;无论是类还是变量模板都不需要,这并不意味着它是不允许的。查看当前的github repo 8e1913d3草案,似乎必须使用选项2。以及实现了仅编译选项2的最新版本。上面说1是不允许的。TAD代表什么?@Hector
template <typename T = double> constexpr T pi = T(3.1415926535897932385);
pi; // Option 1 (I hope...)
pi<>; // Option 2