Я новичок в шаблонах С++, и я (довольно безуспешно) пытаюсь заставить компилятор вывести аргумент имени типа шаблона при инициализации.
Вот мой код.
template <typename T>
class C
{
public:
T a;
C(T a) : a(a) {}
C(const C<T>& other) : a(other.a) {}
};
int main()
{
C<int> x(1);
C y{ x };
return 0;
}
Этот код, скомпилированный g++, приводит к ошибке.
test.cpp:13:11: error: missing template arguments before ‘y’
C y{ x };
^
Я хотел бы сохранить этот синтаксис - просто C без явного указания аргумента шаблона.
Я пытался использовать руководства по дедукции, но это только вызвало еще одну ошибку.
template <typename T> C(const C<T>& other) -> C<T>;
Когда я вставил эту строку ниже определения класса C, я получил это.
test.cpp:10:51: error: expected constructor, destructor, or type conversion before ‘;’ token
template <typename T> C(const C<T>& other) -> C<T>;
^
Другая ошибка произошла, когда я поместил эту строку в определение класса C (вверху).
C(const C<T>& other) -> C<T>;
test.cpp:4:26: error: ‘C’ function with trailing return type not declared with ‘auto’ type specifier
C(const C<T>& other) -> C<T>;
^~~~
В обоих случаях ошибка первого упоминания все еще присутствует.
Благодарю вас!