Ответ
Самый главный результат опроса - почти треть канала состоит из красивых людей. In mom's humble opinion. И это прекрасно! И настоящие профессионалы, и внешне обаятельны, и в душе поэты!
Но ладно, это была лирика(поэт из меня так себе). Перейдем к правильному ответу.
Он был замаскирован, видимо поэтому набрал меньше всего голосов.
Стандарт говорит:
Because the explicit template argument list follows the function template name,
and because constructor templates are named without using a function name,
there is no way to provide an explicit template argument list for these function templates.
Невозможно явно указать шаблонные аргументы для шаблонного конструктора. Компилятор должен суметь вывести эти типы на основе переданных в конструктор аргументов.
Но так как в нашем случае конструктор не принимает никаких параметров - компилятор никак не сможет вывести типы.
Поэтому
невозможно вызвать конструктор у такого класса:
struct Type {
template <typename>
Type() {}
};
Но! Объект такого класса создать можно.
Некоторые функции в С++ неявно создают объекты. Например std::bit_cast.
struct Type {
template <typename>
Type() {};
};
struct Other {};
int main() {
Type t = std::bit_cast<Type>(Other{});
}
Спасибо
@cppnyasha за пример.
Но конкретно в нашем случае была задача вызвать конструктор, а это невозможно.
Solve problems. Stay cool.
#cppcore #cpp20