AnA*_*ons 10 c++ iso decltype pointer-to-member language-lawyer
想象一下我写这个奇怪的原因:
int main()
{
struct S
{
int i;
} var;
int decltype(var)::* pint = &decltype(var)::i;
}
Run Code Online (Sandbox Code Playgroud)
GCC似乎编译得很好,尽管Clang失败了一些不确定的语法相关错误消息.
那么神圣的ISO论文对此有何评论 - 这是否有效?
Ant*_*vin 12
这实际上是Clang中的已知错误.
代码有效.
N4140 [dcl.mptr]/1:
在具有表格 的声明
T D中Dnested-name-specifier
*attribute-specifier-seq opt cv-qualifier-seq optD1并且nested-name-specifier表示一个类,声明中标识符的类型
T D1是" derived-declarator-type-listT",然后标识符的类型D是" derived-declarator-type-list cv-qualifier" -seq指向类型为T" 的类nested-name-specifier的成员".可选的attribute-specifier-seq(7.6.1)属于指向成员的指针.
在这个定义中,我们对嵌套名称说明符感兴趣,它在[expr.prim.general]/8中定义为(强调我的):
嵌套名称说明符:
::type-name::
namespace-name::
decltype-specifier::
nested-name-specifier identifier::
nested-name-specifiertemplateopt simple-template-id::