diff --git a/.travis.yml b/.travis.yml index 243c569..507b9eb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,8 @@ env: addons: apt: packages: + - g++-4.7 + - g++-4.8 - g++-4.9 - g++-5 - g++-6 @@ -45,31 +47,34 @@ matrix: include: - os: linux - env: TOOLSET=gcc COMPILER=g++ + env: TOOLSET=gcc COMPILER=g++ CXXSTD=c++0x - os: linux - env: TOOLSET=gcc COMPILER=g++-4.9 + env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=c++0x - os: linux - env: TOOLSET=gcc COMPILER=g++-5 + env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=c++0x - os: linux - env: TOOLSET=gcc COMPILER=g++-6 + env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=c++0x - os: linux - env: TOOLSET=gcc COMPILER=g++-6 + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++0x - os: linux - env: TOOLSET=clang COMPILER=clang++-3.6 + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++0x - os: linux - env: TOOLSET=clang COMPILER=clang++-3.7 + env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=c++0x - os: linux - env: TOOLSET=clang COMPILER=clang++-3.8 + env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=c++0x + + - os: linux + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=c++0x - os: osx - env: TOOLSET=clang COMPILER=clang++ + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++0x install: - cd .. @@ -86,7 +91,7 @@ install: script: - |- - echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam + echo "using $TOOLSET : : $COMPILER : -std=$CXXSTD ;" > ~/user-config.jam - ./b2 libs/exception/test toolset=$TOOLSET notifications: diff --git a/include/boost/exception/detail/error_info_impl.hpp b/include/boost/exception/detail/error_info_impl.hpp index 6e0bf61..1928d4a 100644 --- a/include/boost/exception/detail/error_info_impl.hpp +++ b/include/boost/exception/detail/error_info_impl.hpp @@ -45,38 +45,47 @@ boost public exception_detail::error_info_base { public: - typedef T value_type; - - error_info( value_type const & value ); + error_info( value_type const & v ): + v_(v) + { + } +#if (__GNUC__*100+__GNUC_MINOR__!=406) //workaround for g++ bug #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES - error_info( error_info const & ); - error_info( value_type && value ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(value)))); - error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.value_)))); + error_info( error_info const & x ): + v_(x.v_) + { + } + error_info( value_type && v ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(v)))): + v_(std::move(v)) + { + } + error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.v_)))): + v_(std::move(x.v_)) + { + } #endif - ~error_info() throw(); - +#endif + ~error_info() throw() + { + } value_type const & value() const { - return value_; + return v_; } - value_type & value() { - return value_; + return v_; } - private: error_info & operator=( error_info const & ); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES error_info & operator=( error_info && x ); #endif - std::string name_value_string() const; - - value_type value_; + value_type v_; }; } diff --git a/include/boost/exception/info.hpp b/include/boost/exception/info.hpp index 3a830cf..88e5960 100644 --- a/include/boost/exception/info.hpp +++ b/include/boost/exception/info.hpp @@ -40,45 +40,6 @@ boost return '[' + error_info_name(x) + "] = " + to_string_stub(x.value()) + '\n'; } - template - inline - error_info:: - error_info( value_type const & value ): - value_(value) - { - } - -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES - template - inline - error_info:: - error_info( error_info const & x ): - value_(x.value_) - { - } - template - inline - error_info:: - error_info( value_type && value ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(value)))): - value_(std::move(value)) - { - } - template - inline - error_info:: - error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.value_)))): - value_(std::move(x.value_)) - { - } -#endif - - template - inline - error_info:: - ~error_info() throw() - { - } - template inline std::string diff --git a/test/error_info_basic_test.cpp b/test/error_info_basic_test.cpp index 021eabc..aa8d6a7 100644 --- a/test/error_info_basic_test.cpp +++ b/test/error_info_basic_test.cpp @@ -16,14 +16,14 @@ typedef boost::error_info error_info_str int main() - { - try - { - throw my_exception() << error_info_string("doh"); - } - catch( my_exception & e ) - { - BOOST_TEST(boost::get_error_info(e) && !strcmp(boost::get_error_info(e)->c_str(),"doh")); - } + { + try + { + throw my_exception() << error_info_string("doh"); + } + catch( my_exception & e ) + { + BOOST_TEST(boost::get_error_info(e) && !strcmp(boost::get_error_info(e)->c_str(),"doh")); + } return 0; - } + }