Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are redundant scope qualifications supported by the compiler, and is it legal?

Tags:

I tested on two compilers, and was surprised to see both support the following definition without complaint:

class A {   A(); };  A::A::A() {}    ^^^ 

Note that this also succeeds for methods, although it is flagged when the declaration is over-qualified.

Questions:

  • Is this a valid C++ program?
  • If so, what purpose does it serve - or is it merely a byproduct?

Updated Detail:

In case the original question was not clear or too short: I'm curious why redundant qualifications are permitted on the definition (emphasis also added above).


Clang an Apple's GCC 4.2 + LLVM were the compilers

like image 404
justin Avatar asked Aug 27 '12 02:08

justin


1 Answers

Yes, it's allowed (§9/2):

The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name. For purposes of access checking, the injected-class-name is treated as if it were a public member name.

For information about the reasoning that lead to class name inject, you might want to read N0444.

like image 83
Jerry Coffin Avatar answered Sep 21 '22 06:09

Jerry Coffin