template keyword following namespace nested-name-specifier
_N4567_.5.1.1 [expr.prim.general]
David Krauss

Created on 2014-05-15.00:00:00 last changed 49 months ago


Date: 2015-05-15.00:00:00

[Moved to DR at the May, 2015 meeting.]

Date: 2014-11-15.00:00:00

Proposed resolution (November, 2014):

Change _N4567_.5.1.1 [expr.prim.general] paragraph 10 as follows (the base wording is as modified by issue 1887):

The nested-name-specifier :: names the global namespace. A nested-name-specifier that names a namespace (9.8 [basic.namespace]), optionally followed by the keyword template (13.3 [temp.names]), and then followed by the name of a member of that namespace (or the name of a member of a namespace made visible by a using-directive), is a qualified-id...
Date: 2014-06-15.00:00:00

Notes from the June, 2014 meeting:

CWG agreed that this usage should be accepted.

Date: 2017-02-06.00:00:00

It is not clear whether the template keyword should be accepted in an example like

  template<typename> struct s {};
  ::template s<void> q; // innocuous disambiguation?

Although it is accepted by the grammar, the verbiage in _N4567_.5.1.1 [expr.prim.general] paragraph 10 does not mention the possibility, while the preceding paragraph dealing with class qualification calls it out explicitly.

Date User Action Args
2017-02-06 00:00:00adminsetstatus: drwp -> cd4
2015-11-10 00:00:00adminsetstatus: dr -> drwp
2015-05-25 00:00:00adminsetmessages: + msg6043
2015-05-25 00:00:00adminsetstatus: tentatively ready -> dr
2014-11-24 00:00:00adminsetmessages: + msg5160
2014-11-24 00:00:00adminsetstatus: drafting -> tentatively ready
2014-07-07 00:00:00adminsetmessages: + msg5084
2014-07-07 00:00:00adminsetstatus: open -> drafting
2014-05-15 00:00:00admincreate