common_type的可疑定义
Questionable definition of common_type
在书中" CPP标准库"中,第二版,尼古拉·乔索蒂斯(Nicolai M.
template <typename T1, typename T2>
struct common_type<T1,T2> {
typedef decltype(true ? declval<T1>() : declval<T2>()) type;
};
我有严重的问题,可以相信这是对common_type的正确定义。原因:
typedef decltype(true ? declval<T1>() : declval<T2>()) type;//As far as I understand this will always pick second operand, declval<T1>(), due to the fact that there is 'true' value. Am I right?
这全都与条件运算符有关。它不是选择语句喜欢或开关。
5.16 ISO C 11标准:
否则,如果第二和第三操作数具有不同的类型,并且具有(可能是CV合格的)类 类型,或者两者都是同一值类别的Glvalues,而同一类型的类型除外 试图将这些操作数中的每一个转换为另一个类型。
因此,声明包含真正条件并不重要,编译器必须选择常见的类型。
upd: 5.16包含对正确行为的进一步描述,您应该看到它以完全理解整个过程。但是对于您的特定问题:
使用此过程,确定第二操作数是否可以是 转换以匹配第三操作数,以及第三操作数是否 可以转换以匹配第二操作数。如果两者都可以 转换,或者可以转换一个,但转换是模棱两可的, 该程序形式不佳。如果两者都无法转换,操作数将 保持不变,并如上所述进行进一步检查 以下。如果完全可以进行一次转换,则转换是 应用于所选操作数,并使用了转换后的操作数 本节其余部分的原始操作数的位置。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- "Type&"与C++函数定义中的"Type*"
- 返回的向量定义为 "std::vector<<error-type>, std::allocator<<error-type>>>
- 类定义内部"error: 'a' does not name a type"
- 编译错误C++与上面定义的发生错误的类型"does not name a type"?
- 对"类:<Type>:类"的未定义引用
- 如何使自定义函数具有"func<type>"语法
- 如何使 QList<Type*> 与 indexOf() 和自定义运算符==()一起使用?
- 在自定义类中实例化自定义类时出现"expected type-specifier"错误
- 在基类子句中使用类中定义的typedefs/type别名
- "random does not name a type "错误,即使包括定义
- c++类型定义需要::type
- 在映射对象上定义自定义迭代器:神秘的"incomplete type"错误
- 检查是否定义了type
- 二进制'operator':没有定义采用 'type' 型左操作数的运算符(或者没有可接受的转换)
- 模板类 "does not name a type" 中定义的类型
- 编译错误"'struct' type redefinition"尽管它是它的第一个定义