【发布时间】:2015-03-18 01:13:01
【问题描述】:
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;
【问题讨论】:
-
你认为
void()应该评估什么? -
@StenSoft
void()只是mem的类型。您无法评估s<void*>::mem,因为它是未实现函数的名称。但这超出了问题的范围。 -
void()函数类型,一般用于模板类型推导,不定义或声明var。
-
@RonTang 是的,通常。但是,language-lawyer 的问题通常超出常规范围。
标签: c++ templates language-lawyer