模板的非静态成员可以专用于数据或函数吗?

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,因此不能是函数类型。