gpt4 book ai didi

C++ decltype 无法推导类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:49 27 4
gpt4 key购买 nike

decltype 在 Visual Studio 2012 中真的有问题还是它实际上应该这么难用?

例子:

namespace ptl
{

struct Test
{
Test(float ){}
};

template<class T, class A0>
static T* static_constructor(void* p, A0 a0){return new(p) T(a0);}

template<class T>
T* MakeVS2012Happy(T*);
}

inline auto ExampleFxn() -> decltype(ptl::MakeVS2012Happy(&ptl::static_constructor<ptl::Test, float>))
{
return &ptl::static_constructor<ptl::Test, float>;
}
inline auto ExampleFxn2() -> decltype(&ptl::static_constructor<ptl::Test, float>)
{
return &ptl::static_constructor<ptl::Test, float>;
}

ExampleFxn 可以编译,因为我用那个毫无意义的函数将代码包装在 decltype 中。

ExampleFxn2 没有,VS2012 吐出非常有用的错误消息:

error C3555: 'decltype' 的参数不正确

有人知道是什么原因造成的吗?我似乎经常不得不与 decltype 作斗争以使其按预期工作......

谢谢

最佳答案

&ptl::static_constructor<ptl::Test, float> 的类型可以通过decltype()推导出来.这看起来像是 MSVC++ 中的错误。 clang 和 gcc 都认为代码没有问题(假设添加了 #include <new>)。

关于C++ decltype 无法推导类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com