简体   繁体   English

提升移动编译错误

[英]boost move compile error

I'm trying to implement the move constructor outside the class body, but it won't compile correctly 我正在尝试在类体外部实现移动构造函数,但它无法正确编译

#include <boost/move/move.hpp>

class Test
{
    BOOST_COPYABLE_AND_MOVABLE(Test)
public:
    Test() {}
    Test(const Test & other) { }
    Test(BOOST_RV_REF(Test) other);
    Test & operator=(BOOST_COPY_ASSIGN_REF(Test) other) { return *this; } 
    Test & operator=(BOOST_RV_REF(Test) other) { return *this; }
};

Test::Test(BOOST_RV_REF(Test) other) { }

I compiled this code with g++, my g++ version is 4.4.7 我用g ++编译了这段代码,我的g ++版本是4.4.7

$ g++ -c test.cpp
test.cpp:15: error: prototype for 'Test::Test(boost::rv<Test>&)' does not match any in class 'Test'
test.cpp:9: error: candidates are: Test::Test(boost:rv<Test>&)
test.cpp:8: error:                 Test::Test(const Test&)
test.cpp:7: error:                 Test::Test()

It also failed with g++ 5.4.0 – flyzero 它也失败了g ++ 5.4.0 - flyzero

Must be your boost version. 必须是你的助推版。

It works fine with g++ 5.4.1 and Boost 1.64. 它适用于g ++ 5.4.1和Boost 1.64。 If not, check the preprocessor output for any include/macro mishaps. 如果没有,请检查预处理器输出是否存在任何包含/宏故障。

In Linux, ::boost::rv is declared with may_alias attribute. 在Linux中, :: boost :: rv使用may_alias属性声明。 My code compile correctly after removing the may_alias attribute. 删除may_alias属性后,我的代码可以正确编译。

#define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))

template <class T>
class rv
    : public ::boost::move_detail::if_c
        < ::boost::move_detail::is_class<T>::value
        , T
        , ::boost::move_detail::nat
        >::type
{
    rv();
    ~rv() throw();
    rv(rv const&);
    void operator=(rv const&);
} BOOST_MOVE_ATTRIBUTE_MAY_ALIAS;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM