Мову стандарту можна простежити до n3282 , що є дозволом для дефектів 1207 та 1017 . Зокрема, мова пропонується у запропонованій резолюції щодо дефекту 1207, і, отже, його слід розглядати в контексті стандарту, як він існував на момент усунення дефекту. На той час існувала певна стурбованість щодо переписування виразів id у вирази доступу членів за допомогою *this
(9.3.1p3), зокрема в контексті оголошень типу trailing-return (див. Випуск 945 ).
Якщо ми порівняємо запропоновану резолюцію про дефект 1207 з можливою мовою в n3282 і згодом у стандарті, є одна суттєва різниця до 9.3.1p3:
Дефект 1207:
Коли вираз id (5.1 [expr.prim]), який не є частиною синтаксису доступу члена класу (5.2.5 [expr.ref]) і не використовується для формування вказівника на член (5.3.1 [expr.unary .op]) використовується в оголошенні функції-члена класуX
, якщо пошук імені (3.4 [basic.lookup]) вирішує ім'я ...
n3282 та C ++ 11:
Коли вираз id (5.1 [expr.prim]), який не є частиною синтаксису доступу члена класу (5.2.5 [expr.ref]) і не використовується для формування вказівника на член (5.3.1 [expr.unary .op]) використовується в елементі класу X
в контексті, де this
може бути використаний (5.1.1 [expr.prim.general]) , якщо пошук імен (3.4 [basic.lookup]) вирішує ім'я [...]
Очевидно, що пропонована резолюція про дефект 1207 мала переконання, що вирази id (до статичного члена) у функціях статичного члена повинні бути перетворені у *this
вирази доступу до членів і, отже, потребуватимуть доступу до категорії типу та значення this
. На момент написання n3282 це було вирішено на користь перетворення кваліфікованого ідентифікатора (також 9.3.1p3), яке не вимагає this
, але мова в 5.1.1p3 залишалася остаточно.
Я б порекомендував підняти це питання на дискусійній групі новин щодо стандартів C ++; можливо, можна буде видалити рудиментарну мову редакційно.