【发布时间】:2012-12-29 19:42:17
【问题描述】:
在 Visual Studio 2012 中 decltype 真的有问题吗,或者它实际上应该很难使用?
例子:
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 吐出非常有用的错误信息:
错误 C3555:“decltype”的参数不正确
有人知道这是什么原因吗?我似乎必须经常与 decltype 作斗争才能使其按预期工作......
谢谢
【问题讨论】:
-
这个问题在 VC++ 2013 Update 4 中仍然存在。
-
这种解决方法实际上效果很好!如果从
MakeVS2012Happy中删除*s,它也适用于非静态成员函数。 -
这似乎已在 VC++ 2015 RC 中修复。
标签: c++ visual-c++ c++11 decltype