Проблема
Вызванный конструктор (т. Е. A::A(T)
) не выполняется должным образом.Вызов его компилируется (с использованием GCC-8.3.0), но, похоже, не выполняет std::cout operator<<
.Почему это так?
Код
struct A {
template <typename T>
constexpr A(T) {
std::cout << "A::A(T)";
}
};
struct B {};
int main() {
::A a (B());
}
Почему вы вообще это делаете?
Я пытаюсьвыводим тип T
- шаблонный аргумент .Объект не имеет значения и поэтому не назван.Мне требуется тип T
для доступа к определенным данным во время компиляции (среди прочего для static_assert
).Насколько я знаю, в C ++ невозможно явно указать аргумент шаблона в качестве параметра конструктора.(Итак: A a = A::A<T>
).Я мог бы сделать это косвенным путем, то есть создать статическую функцию-член для создания, где можно указать параметр:
struct C {
template <typename T>
static constexpr C create() {
// do whatever you want with T
return C();
}
};
Однако я в основном просто экспериментирую.