Рассмотрим следующий код: (Идеал)
struct S
{
int a() {return 0;}
decltype(a()) b() {return 1;}
};
Это дает мне следующую ошибку:
error: не может вызвать функцию-член 'int S:: a()' без объекта
С другой стороны, этот код компилируется отлично: (Ideone)
struct S
{
int a() {return 0;}
auto b() -> decltype(a()) {return 1;}
};
Почему один пример работает, но другой не удается скомпилировать?
Является ли поведение компилятора полностью правильным в обоих примерах?
Если компилятор прав, то почему стандарт задает такое странное поведение?