Movatterモバイル変換


[0]ホーム

URL:


This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 119a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2025-12-20


1838. Definition viaunqualified-id andusing-declaration

Section:_N4868_.9.8.2.3  [namespace.memdef]    Status:CD4    Submitter:Richard Smith    Date:2014-01-17

[Moved to DR at the November, 2014 meeting.]

The Standard is not clear about what happens when an entity isdeclared but not defined in an inner namespace and declared via ausing-declaration in an outer namespace, and a definition of anentity with that name as anunqualified-id appears in the outernamespace. Is this a legitimate definition of the inner-namespace entity,as it would be if the definition used aqualified-id, or is thedefinition a member of the outer namespace and thus in conflict withtheusing-declaration? There is implementation divergence onthe treatment of such definitions.

See also issues1708 and1021.

Notes from the February, 2014 meeting:

CWG agreed that the definition in such cases is a member of theouter namespace, not a redeclaration of the name introduced in thatnamespace by theusing-declaration.

Proposed Resolution (July, 2014):

  1. Change _N4868_.9.8.2.3 [namespace.memdef] paragraph 1 as follows:

  2. Members (including explicit specializations of templates(13.9.4 [temp.expl.spec])) of a namespace can be definedwithin that namespace.A declaration in a namespaceN (excluding declarations in nested scopes) whosedeclarator-id is anunqualified-id declares (orredeclares) a member ofN, and may be a definition.[Note: An explicit instantiation (13.9.3 [temp.explicit])or explicit specialization (13.9.4 [temp.expl.spec]) of atemplate does not introduce a name and thus may be declaredusing anunqualified-id in a member of the enclosingnamespace set, if the primary template is declared in an inlinenamespace. —end note] [Example:

      namespace X {    void f() { /* ... */ }// OK: introducesX::f()    namespace M {      void g();             // OK: introducesX::M::g()    }    using M::g;    void g();               // error: conflicts withX::M::g()  }

    end example]

  3. Change _N4868_.9.8.2.3 [namespace.memdef] paragraph 3 as follows:

  4. Every name first declared in a namespace is a member of thatnamespace. If afriend declaration...

This resolution also resolves issues1021and987.




[8]ページ先頭

©2009-2026 Movatter.jp