gpt4 book ai didi

c++ - Boost::typeof 编译器问题:重整 typeof,改用 decltype

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:41 27 4
gpt4 key购买 nike

简短的例子:

#include <boost/typeof/typeof.hpp>
#include <boost/proto/core.hpp>
using namespace boost;


template<class T, class U>
BOOST_TYPEOF_TPL(T() + U()) add2(const T& t, const U& u)
{
return t + u;
};

int main(){

typedef BOOST_TYPEOF(add2(2.5, 1.5)) type; // get type -> works

BOOST_STATIC_ASSERT((is_same<type, double>::value)); // check if double -> no error -> double

double xxx = add2(1.5,1.5); // cause the problems
return 0;
}

当我尝试编译这个时,我变成了这样的错误:

g++-4.3:抱歉,未实现:修改 typeof,改用 decltype

g++-4.2:internal compiler error: in write_type, at cp/mangle.c:1648
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-4.2/README.Bugs>.

gcc 版本 4.3.2 (Debian 4.3.2-1.1)gcc 版本 4.2.4 (Debian 4.2.4-6)

问题出在哪里或者我哪里做错了?a

最佳答案

The example in the typeof documentation首先将 BOOST_TYPEOF_TPL 宏的结果包装在模板结构中,然后在声明函数时使用它。这对你有什么好处吗?

template<class T, class U>
struct result_of_add2
{
typedef BOOST_TYPEOF_TPL(T() + U()) type;
};

template<class T, class U>
typename result_of_add2<T, U>::type add2(const T& t, const U& u)
{
return t + u;
};

关于c++ - Boost::typeof 编译器问题:重整 typeof,改用 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681459/

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