由this question触发,我想知道是否允许这样做:
template <typename T>
T foo(){return T{};}
struct bar {};
int main()
{
bar a = foo<decltype(a)>();
}
我尝试过的编译器毫无抱怨地接受了它,但是我不确定这是否真的合法,或者我是否缺少任何陷阱(并且在声明时使用a
的类型看起来很奇怪)。
对于背景:在链接的问题中,OP希望避免auto
并同时拼写两次类型(此处是该问题中的bar
,SomeComplexTypeAndNotAuto
),因此他们使用了(未使用的)参数推论T
。我不喜欢仅仅为了推断类型而滥用参数,所以我的第一个想法是decltype
。
这是犹太洁食。