Как было объяснено в этом Q&Вчера, и 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.
Мой вопрос Эта ошибка также исчезнет в C ++ 14 с вычетом возвращаемого типа, так что я могу опустить decltype
и мой private
раздел в конце определения класса?
НОТА: Это на самом деле работает основываясь на ответе @JesseGood.
Нет, но в этом больше нет необходимости, потому что вы можете сказать,
decltype(auto) foo() const {
return b_;
}
Это автоматически выведет тип возвращаемого значения из его тела.
Я так не думаю, потому что C ++ 14 будет автоматически выводить тип возврата. Следующее компилируется с g ++ 4.8, передавая -std=c++1y
флаг.
auto foo() const
{
return b_;
}