Код: Выделить всё
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++? И это скорее вопрос к авторам предложения или к комитету C++ ISO, но если кто-нибудь из них увидит следующее: желательно ли, чтобы окончательная формулировка функции включала в себя возможность для шаблонов псевдонимов, таких как этот, также генерировать для них неявные руководства?
Я понимаю, что, поскольку шаблоны псевдонимов могут иметь любые параметры шаблона, компилятору не всегда возможно успешно вывести аргументы шаблона целевого класса, но в таком случае я ожидаю, что компилятор сможет сделать то же самое, что и непосредственно для целевого класса.
Я строю с помощью gcc, созданного из головы всего несколько дней назад, используя --std=c++1z. Полная информация о версии: gcc версия 7.0.0 20161201 (экспериментальная) (доморощенный gcc HEAD- --with-jit)
Подробнее здесь: https://stackoverflow.com/questions/410 ... s-template
Мобильная версия