gpt4 book ai didi

c++ - 错误 C2064 适用于 Windows 但不适用于 Linux

转载 作者:可可西里 更新时间:2023-11-01 13:27:34 25 4
gpt4 key购买 nike

我现在正在编译一个开源图像处理项目olena .这是一个很棒的图像处理库,我已经成功地为 Linux (4.6.3) 编译了它。由于习惯了Windows,我也尝试用Visual Studio 2010在Windows下编译项目,但是编译的时候出现了C2064的错误信息:

Error   1   error C2064: term does not evaluate to a function taking 0 arguments    C:\olena-2.1\olena-2.1\milena\mln\metal\is_a.hh 101

根据错误信息,我想出了这段代码:

 /*!
\internal
\brief "is_a" check.

Check whether T inherits from _CONCEPT_ M.
*/
template <typename T, template <class> class M>
struct is_a : bool_<(
sizeof( internal::helper_is_a_< T, M >::selector(internal::make_< T >::ptr()) ) //**ERROR**
==
sizeof( internal::yes_ ) )>
{};

这是一个非常短的代码片段,但我不知道错误可能来自哪里。有任何想法吗?谢谢。

注意事项:

interanl::make_<T>::ptr()的定义如下:

  template <typename T>
inline
T*
make_<T>::ptr() // This piece of code is defined to prevent an ICE from g++-2.95.
{
T* tmp;
return tmp;
}

template <typename T>
struct make_
{
static T* ptr();
};

iternal::helper_is_a_的定义是

 template <typename T, template <class> class M>
struct helper_is_a_
{

template<class V>
static yes_ selector(M<V>*);
static no_ selector(...);
};

最佳答案

这会工作(使用 vs2008 测试)。

template <typename T, template <class> class M>
struct is_a
{
static const bool value = bool_<( sizeof( internal::helper_is_a_< T, M >::selector(internal::make_< T >::ptr()) )
==
sizeof( internal::yes_ ) )>::value;
};

无论出于何种原因,当将 sizeof 视为基类或成员时,它会尝试立即对其求值。您的原始代码使用 VS2013 C++11 编译。

关于c++ - 错误 C2064 适用于 Windows 但不适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33955808/

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