По запросу этот вопрос , мне было интересно, разрешено ли это:
template <typename T>
T foo(){return T{};}
struct bar {};
int main()
{
bar a = foo<decltype(a)>();
}
Компиляторы, которые я пробовал, приняли его без нареканий, но я не уверен, действительно ли это законно или если я пропускаю какие-либо ловушки (и кажется странным использовать тип a
во время его объявления).
Для фона: в связанном вопросе OP хочет избежать auto
и дважды указывать тип (здесь это bar
, SomeComplexTypeAndNotAuto
в этом вопросе), следовательно, они используют (неиспользованный) параметр для вывода T
. Мне не нравилось неправильно использовать параметр просто для вывода типа, поэтому моей первой идеей было decltype
.