Literały zdefiniowane przez użytkownika, podkreślenia i nazwy globalne

W C ++ 11 otrzymujemy literały zdefiniowane przez użytkownika. Standard C ++ ma takie przykłady, jak:

long double operator "" _w(long double);

I mówi, że literał powinien zaczynać się od podkreślenia:

17.6.4.3.5 Dosłowne definicje zdefiniowane przez użytkownika
Dosłowne identyfikatory su ffi x, które nie zaczynają się od znaku podkreślenia, są zarezerwowane dla przyszłej standaryzacji.

Jest jednak inna sekcja w standardzie, która mówi

17.6.4.3.2 Nazwy globalne
Niektóre zestawy nazw i podpisów funkcji są zawsze zarezerwowane dla implementacji:
- Każda nazwa, która zawiera podwójny znak podkreślenia _ _ lub zaczyna się od znaku podkreślenia, po którym następuje wielka litera (2.12), jest zarezerwowana dla implementacji dla dowolnego użycia.
- Każda nazwa zaczynająca się od znaku podkreślenia jest zarezerwowana dla implementacji w celu użycia jako nazwy w globalnej przestrzeni nazw.

Staram się lepiej zrozumieć, co dokładnie mówi / znaczy 17.6.4.3.2 (Nazwy globalne) i jak odnosi się to do 17.6.4.3.5 (dosłowne definicje zdefiniowane przez użytkownika). Konkretnie:

Czy druga część 17.6.4.3.2 (nazwy globalne) wymaga literałów zdefiniowanych przez użytkownika (jak powyżej)_w) do zdefiniowania w przestrzeni nazw (czyli nie w globalnej przestrzeni nazw)? Jeśli tak, chciałbym, żeby standard to zilustrował.Przypuszczam, że pierwsza część 17.6.4.3.2 (nazwy globalne) wyklucza literały zdefiniowane przez użytkownika, takie jak_W (a następnie wielkie litery) i__w i_w__ (dwa kolejne podkreślenia). Poprawny?

Edytować:

W dalszej części znajduje się część standardu, która mówi:

13.5.8 Literały zdefiniowane przez użytkownika
[...]
2 Deklaracja, której deklarator-id jest literal-operator-id, będzie deklaracją funkcji obszaru nazw lub szablonu funkcji (może to być funkcja znajomego (11.3)), jawna instancja lub specjalizacja szablonu funkcji lub deklaracja użycia (7.3.3). Funkcja zadeklarowana z literal-operator-id jest operatorem dosłownym. Szablon funkcji zadeklarowany za pomocą literal-operator-id jest dosłownym szablonem operatora.

Nacisk mój. Kiedy mówi „zakres przestrzeni nazw” oznacza, że ​​literały zdefiniowane przez użytkownika muszą być zadeklarowane w przestrzeni nazw zdefiniowanej przez użytkownika (tj. Nie w globalnej przestrzeni nazw)?

Późniejsza edycja:

Nie istniało, gdy pytanie zostało zadane po raz pierwszy, ale teraz jest teżto powiązane pytanie i odpowiedź, którzy czytelnicy mogą dodatkowo sprawdzić po przejrzeniu poniższych odpowiedzi.

questionAnswers(1)

yourAnswerToTheQuestion