Trailing return types, decltype and const-ness

前端 未结 1 1098
梦毁少年i
梦毁少年i 2021-01-07 22:36

I was merily experimenting with the new trailing return types, where I hit a problem with this (simplified) code

#include 

class MyContainer{
           


        
相关标签:
1条回答
  • 2021-01-07 23:07

    You are correct, this is a bug. According to N3291, section 5.1.1, paragraph 3:

    If a declaration declares a member function or member function template of a class X, the expression this is a prvalue of type “pointer to cv-qualifier-seq X” between the optional cv-qualifer-seq and the end of the function-definition, member-declarator, or declarator. It shall not appear before the optional cv-qualifier-seq and it shall not appear within the declaration of a static member function (although its type and value category are defined within a static member function as they are within a non-static member function). [Note: this is because declaration matching does not occur until the complete declarator is known. —end note ] Unlike the object expression in other contexts, *this is not required to be of complete type for purposes of class member access (5.2.5) outside the member function body. [Note: only class members declared prior to the declaration are visible. —end note ]

    But this was a recent change between the last working draft and N3291. So GCC was right less than 6 months ago; that's the danger of writing code to a moving specification.

    0 讨论(0)
提交回复
热议问题