On 07/07/2018 18:14, Peter Dimov via Boost wrote:
Paul A. Bristow wrote:
Having failed to build Boost libraries using Clang 6.0.0 using b2/bjam on Windows, I am now trying instead to use Codeblocks on Windows 10 to build static libraries.
I'll need more information than that, because the tests for System pass on Clang 6 on Travis.
It's the windows build that's the issue, not Linux. Compiling from within the VC IDE using the clang installed LLVM-2014 toolset, and the full command line options: /GS /GL /W3 /Gy /Zc:wchar_t /I"m:\data\boost\boost" /Zi /Gm- /O2 /Fd"x64\Release\system.pdb" /Zc:inline /fp:precise /D "NDEBUG" /D "_LIB" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\system.pch" I see: 1>clang-cl.exe : warning : argument unused during compilation: '/Gm-' [-Wunused-command-line-argument] 1>In file included from ..\..\..\..\libs\system\src\error_code.cpp:16: 1>m:\data\boost\boost\boost/system/error_code.hpp(226,41): error : constexpr constructor never produces a constant expression [-Winvalid-constexpr] 1> BOOST_SYSTEM_CONSTEXPR explicit std_category( boost::system::error_category const * pc ): pc_( pc ) 1> ^ 1>m:\data\boost\boost\boost/system/error_code.hpp(226,41): note: non-constexpr constructor 'error_category' cannot be used in a constant expression 1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(168,18): note: declared here 1> /* constexpr */ error_category() _NOEXCEPT // TRANSITION 1> ^ 1>In file included from ..\..\..\..\libs\system\src\error_code.cpp:19: 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(78,33): warning : 'strerror' is deprecated: This function or variable may be unsafe. Consider using strerror_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [-Wdeprecated-declarations] 1> const char * c_str = std::strerror( ev ); 1> ^ 1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\string.h(180,16): note: 'strerror' has been explicitly marked deprecated here 1>_Check_return_ _CRT_INSECURE_DEPRECATE(strerror_s) 1> ^ 1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h(269,55): note: expanded from macro '_CRT_INSECURE_DEPRECATE' 1> #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT( \ 1> ^ 1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vcruntime.h(259,47): note: expanded from macro '_CRT_DEPRECATE_TEXT' 1>#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) 1> ^ 1>In file included from ..\..\..\..\libs\system\src\error_code.cpp:19: 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(458,73): error : variable does not have a constant initializer 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL system_error_category system_category_instance; 1> ^~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(458,1): note: required by 'require_constant_initialization' attribute here 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL system_error_category system_category_instance; 1>^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/error_code.hpp(392,44): note: expanded from macro 'BOOST_SYSTEM_REQUIRE_CONST_INIT' 1># define BOOST_SYSTEM_REQUIRE_CONST_INIT [[clang::require_constant_initialization]] 1> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/error_code.hpp(226,41): note: non-constexpr constructor 'error_category' cannot be used in a constant expression 1> BOOST_SYSTEM_CONSTEXPR explicit std_category( boost::system::error_category const * pc ): pc_( pc ) 1> ^ 1>m:\data\boost\boost\boost/system/error_code.hpp(252,70): note: in call to 'std_category(&system_category_instance)' 1> BOOST_SYSTEM_CONSTEXPR error_category() BOOST_SYSTEM_NOEXCEPT: std_cat_( this ) {} 1> ^ 1>m:\data\boost\boost\boost/system/error_code.hpp(370,28): note: in call to 'error_category()' 1> BOOST_SYSTEM_CONSTEXPR system_error_category() BOOST_SYSTEM_NOEXCEPT 1> ^ 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(458,73): note: in call to 'system_error_category()' 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL system_error_category system_category_instance; 1> ^ 1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(168,18): note: declared here 1> /* constexpr */ error_category() _NOEXCEPT // TRANSITION 1> ^ 1>In file included from ..\..\..\..\libs\system\src\error_code.cpp:19: 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(459,74): error : variable does not have a constant initializer 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL generic_error_category generic_category_instance; 1> ^~~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(459,1): note: required by 'require_constant_initialization' attribute here 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL generic_error_category generic_category_instance; 1>^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/error_code.hpp(392,44): note: expanded from macro 'BOOST_SYSTEM_REQUIRE_CONST_INIT' 1># define BOOST_SYSTEM_REQUIRE_CONST_INIT [[clang::require_constant_initialization]] 1> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1>m:\data\boost\boost\boost/system/error_code.hpp(226,41): note: non-constexpr constructor 'error_category' cannot be used in a constant expression 1> BOOST_SYSTEM_CONSTEXPR explicit std_category( boost::system::error_category const * pc ): pc_( pc ) 1> ^ 1>m:\data\boost\boost\boost/system/error_code.hpp(252,70): note: in call to 'std_category(&generic_category_instance)' 1> BOOST_SYSTEM_CONSTEXPR error_category() BOOST_SYSTEM_NOEXCEPT: std_cat_( this ) {} 1> ^ 1>m:\data\boost\boost\boost/system/error_code.hpp(354,28): note: in call to 'error_category()' 1> BOOST_SYSTEM_CONSTEXPR generic_error_category() BOOST_SYSTEM_NOEXCEPT 1> ^ 1>m:\data\boost\boost\boost/system/detail/error_code.ipp(459,74): note: in call to 'generic_error_category()' 1>BOOST_SYSTEM_REQUIRE_CONST_INIT BOOST_SYSTEM_DECL generic_error_category generic_category_instance; 1> ^ 1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(168,18): note: declared here 1> /* constexpr */ error_category() _NOEXCEPT // TRANSITION 1> ^ 1>1 warning and 3 errors generated. I believe the error is correct as well: class std_category has virtual member functions and so no constructor can ever be constexpr as the type can never be a literal. HTH, John. --- This email has been checked for viruses by AVG. https://www.avg.com