«функция с выведенным типом возвращаемого значения не может использоваться до того, как она определена» при использованиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 «функция с выведенным типом возвращаемого значения не может использоваться до того, как она определена» при использовани

Сообщение Anonymous »

У меня возникла проблема со специализацией шаблона функции и определением типа возвращаемого значения в C++. Следующий минимальный пример предназначен для демонстрации проблемы (https://godbolt.org/z/WT1Prnfh6):

Код: Выделить всё

#include 

// Forward declaration of construct, using return type deduction
template 
auto construct(Args... args);

// Specialization for Version 1 – takes const reference
template 
auto construct(const std::optional& o) {
return 0;
}

// Specialization for Version 2 – takes by value
template 
auto construct(std::optional o) {
return 0;
}

int main() {
std::optional o;

construct(o);    // fails
construct(o);    // works
return 0;
}
Ошибка компилятора:

Код: Выделить всё

error: function 'construct' with deduced return type cannot be used before it is defined
Вызов конструкции(o) завершается с ошибкой, а конструкция (o) работает. Насколько я понимаю, это связано с тем, что тип возвращаемого значения функции выводится после того, как компилятор увидит вызов, и поскольку конструкция еще не полностью определена, ее нельзя использовать.
Мои вопросы:
  • Почему конструкция не работает, но Конструкция работает?
  • Как правильно объявить или структурировать это, чтобы можно было безопасно использовать выведенные специализации возвращаемого типа?


Подробнее здесь: https://stackoverflow.com/questions/797 ... d-when-usi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»