decltype переменной члена класса, это запрещено?Зачем? - PullRequest
3 голосов
/ 28 октября 2011

Я могу написать

int a;
decltype(a) b;

но мой компилятор (Microsoft Visual Studio 2010, cl версия 16.00.40219.01) запрещает мне

class A
{
   int a;
   decltype(a) b;// error C2327: 'A::a' : is not a type name, static, or enumerator
};

Также Comeau C / C ++ 4.3.10.1 (6 октября 2008 11:28:09) для ONLINE_EVALUATION_BETA2 выдает похожую ошибку.

"ComeauTest.c", line 7: error: a nonstatic member reference must be relative to a
          specific object
     decltype(a) b;
              ^

В чем причина такого поведения?

1 Ответ

3 голосов
/ 28 октября 2011

Да, это действительно. Внутри неоцененных операндов (операнды decltype, sizeof, noexcept, ...) вы можете называть нестатические элементы данных также вне функций-членов.

Те компиляторы, которые вы пробовали, пока не поддерживают эту функцию.

...