Вопрос

Разрешено ли вычитание возвращаемого типа для функций-членов в c ++ 14 или только для свободных функций?

Я спрашиваю, потому что я вроде как неявно предполагал, что это сработает, но в gcc 4.8.1 я получаю внутреннюю ошибку компилятора ("in gen_type_die_with_usage").Впервые я получаю такую загадочную ошибку, поэтому я немного скептически настроен;и я знаю, что с тех пор они изменили спецификацию.

Для наглядности у меня это работает:

auto foo() {return 5;}

но это не значит:

class Bar{
auto baz() {return 5;}
}

Разрешено ли это в проекте стандарта?

Это было полезно?

Решение

Да, стандарт должен допускать это в соответствии с документом n3582.Вот пример из статьи.

Разрешение объявления неопределяющих функций с типом автоматического возврата не является строго необходимым, но это полезно для стилей кодирования, которые предпочитают определять функции-члены вне класса:

    struct A {
      auto f(); // forward declaration
    };
    auto A::f() { return 42; }

и если мы допускаем это в этой ситуации, то это должно быть справедливо и в других ситуациях.Разрешение этого также является более ортогональным выбором;в общем, я считаю, что если объединение двух функций может сработать, то это должно сработать.

Согласно комментарию @bamboon, "Вычет возвращаемого типа поддерживается только начиная с gcc 4.9". так что это объясняет, почему у вас его нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top