Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带默认模板参数的C++14变量模板?_C++_Templates_Variables_C++14 - Fatal编程技术网

带默认模板参数的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

C++14将允许变量模板:

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