Подтвердить что ты не робот

Вывод типа возвращаемого значения с переменной частного члена

Как объяснялось в этом Q & A вчера, как g++ 4.8, так и Clang 3.3 правильно жалуются на код ниже с ошибкой типа "b_" не был объявлен в этой области "

#include <iostream>

class Test
{
public:
    Test(): b_(0) {}

    auto foo() const -> decltype(b_) // just leave out the -> decltype(b_) works with c++1y
    { 
        return b_;    
    }    
private:
    int b_;
};

int main() 
{
    Test t;
    std::cout << t.foo();
}

Перемещение раздела private в начало определения класса устраняет ошибку и печатает 0.

Мой вопрос: эта ошибка также исчезнет в С++ 14 с выводом типа возврата, так что я могу оставить decltype и иметь мой раздел private в конце определения класса?

ПРИМЕЧАНИЕ: работает на основе ответа @JesseGood.

4b9b3361

Ответ 1

Нет, но больше нет необходимости в этом, потому что вы можете сказать

decltype(auto) foo() const { 
    return b_;    
}

Это автоматически выводит тип возврата из его тела.

Ответ 2

Я так не думаю, потому что С++ 14 будет иметь автоматический возврат типа типа. Следующие компиляции с g++ 4.8 передают флаг -std=c++1y.

auto foo() const
{ 
    return b_;    
}