模板的非静态成员可以专注于数据或功能吗?

时间:2015-03-18 01:13:02

标签: c++ templates language-lawyer

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;

1 个答案:

答案 0 :(得分:8)

由于14.3.1 / 3:

,代码无效
  

如果声明通过依赖于template-parameter的类型获取函数类型,则会导致a   声明不使用函数声明符的语法形式来具有函数类型的程序   是不正确的。

此处声明的类型取决于模板参数t,因此不能是函数类型。