2017-05-16 23 views
1

私はクラス本体の外側移動のコンストラクタを実装しようとしているが、それは正しくブースト移動コンパイルエラー

#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) { } 

私は私の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() 
+0

MSVC 2013で正常にコンパイルされるようです。 – Tas

+0

g ++ 5.4.0でも失敗しました。 – flyzero

答えて

0

また、グラムで失敗しました++ 5.4.0 - flyzero

ムーstはあなたのブーストバージョンです。

g ++ 5.4.1とBoost 1.64では問題なく動作します。そうでない場合は、プリプロセッサの出力にインクルード/マクロの不具合がないかチェックしてください。

0

Linuxの場合、:: boost :: rvはmay_alias属性で宣言されています。 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; 
関連する問題