模板的非静态成员可以专用于数据或函数吗?
Can a nonstatic member of a template specialize to data or function?
GCC、Clang、ICC 和 MSVC 都拒绝这种代码,但我在 C++ 标准的最新工作草案中没有发现任何违反规则的地方。
规则是否已经在标准中,或者在缺陷报告中?
#include <type_traits>
template< typename t >
struct s {
std::conditional_t< std::is_integral< t >::value, t, void() > mem;
};
s< int > a;
s< void * > b;
由于 14.3.1/3,代码无效:
If a declaration acquires a function type through a type dependent on a template-parameter and this causes a
declaration that does not use the syntactic form of a function declarator to have function type, the program
is ill-formed.
这里声明的类型依赖于模板参数t
,因此不能是函数类型。
GCC、Clang、ICC 和 MSVC 都拒绝这种代码,但我在 C++ 标准的最新工作草案中没有发现任何违反规则的地方。
规则是否已经在标准中,或者在缺陷报告中?
#include <type_traits>
template< typename t >
struct s {
std::conditional_t< std::is_integral< t >::value, t, void() > mem;
};
s< int > a;
s< void * > b;
由于 14.3.1/3,代码无效:
If a declaration acquires a function type through a type dependent on a template-parameter and this causes a declaration that does not use the syntactic form of a function declarator to have function type, the program is ill-formed.
这里声明的类型依赖于模板参数t
,因此不能是函数类型。