是否允许在初始化程序中为decltyped的变量使用decltype?

问题描述 投票:3回答:1

this question触发,我想知道是否允许这样做:

template <typename T>
T foo(){return T{};}

struct bar {};

int main()
{

    bar a = foo<decltype(a)>();
}

我尝试过的编译器毫无抱怨地接受了它,但是我不确定这是否真的合法,或者我是否缺少任何陷阱(并且在声明时使用a的类型看起来很奇怪)。

对于背景:在链接的问题中,OP希望避免auto并同时拼写两次类型(此处是该问题中的barSomeComplexTypeAndNotAuto),因此他们使用了(未使用的)参数推论T。我不喜欢仅仅为了推断类型而滥用参数,所以我的第一个想法是decltype

c++ language-lawyer decltype
1个回答
9
投票

这是犹太洁食。

© www.soinside.com 2019 - 2024. All rights reserved.