Вывод аргументов шаблона класса не работает с шаблоном псевдонимаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вывод аргументов шаблона класса не работает с шаблоном псевдонима

Сообщение Anonymous »

рассмотрите код, вставленный ниже. Я определил очень простой класс, для которого компилятор генерирует неявное руководство по выводу, поэтому его можно создать без явных аргументов шаблона. Однако вывод аргументов шаблона не работает для создания объекта из простого шаблона псевдонима, который перенаправляется только непосредственно в целевой класс:

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

template< typename A, typename B >
struct Foo {
Foo( A const &a, B const &b )
: a_(a), b_(b)
{ }

A a_;
B b_;
};

template< typename A, typename B >
using Bar = Foo;

auto foobar() {
Foo r{1, 2};
Bar s{3, 4};
// ../src/geo/vector_test_unit.cpp: In function 'auto foobar()':
// ../src/geo/vector_test_unit.cpp:16:6: error: missing template arguments before 's'
//   Bar s{3, 4};
//       ^
return 1;
}
Как видно из комментария к коду выше, g++ выдает ошибку об использовании шаблона с псевдонимом без аргументов шаблона. Я надеялся, что в таком случае будет перенаправлен вывод аргументов шаблона.

Итак, мой вопрос: это специально разработанная текущая формулировка предложения по выводу аргументов шаблона класса? Или это незавершенная функция или ошибка в текущей реализации этой функции на g++? И это скорее вопрос к авторам предложения или к комитету C++ ISO, но если кто-нибудь из них увидит следующее: желательно ли, чтобы окончательная формулировка функции включала в себя возможность для шаблонов псевдонимов, таких как этот, также генерировать для них неявные руководства?

Я понимаю, что, поскольку шаблоны псевдонимов могут иметь любые параметры шаблона, компилятору не всегда возможно успешно вывести аргументы шаблона целевого класса, но в таком случае я ожидаю, что компилятор сможет сделать то же самое, что и непосредственно для целевого класса.

Я строю с помощью gcc, созданного из головы всего несколько дней назад, используя --std=c++1z. Полная информация о версии: gcc версия 7.0.0 20161201 (экспериментальная) (доморощенный gcc HEAD- --with-jit)

Подробнее здесь: https://stackoverflow.com/questions/410 ... s-template
Ответить

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

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

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

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

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