I build the ceph project which included boost and compiled it from sources.
While building I encountered with compile error - non-type template argument is not a constant expression.
I use the clang++-20 compiler on Astra Linux 1.8 (Debian 13).
Note: compilation with clang++-14 was done without errors.
Can you fix this error for support clang > 14, please?
In file included from /ceph-inst/src/rgw/rgw_s3select.cc:4:
In file included from /ceph-inst/src/rgw/rgw_s3select_private.h:11:
In file included from /ceph-inst/src/common/ceph_crypto.h:10:
In file included from /ceph-inst/src/include/types.h:21:
In file included from /ceph-inst/src/include/uuid.h:9:
In file included from /ceph-inst/src/include/encoding.h:41:
In file included from /ceph-inst/src/include/denc.h:51:
In file included from /ceph-inst/src/common/error_code.h:22:
In file included from /ceph-inst/src/boost/boost/asio.hpp:25:
In file included from /ceph-inst/src/boost/boost/asio/basic_deadline_timer.hpp:25:
In file included from /ceph-inst/src/boost/boost/asio/detail/deadline_timer_service.hpp:29:
In file included from /ceph-inst/src/boost/boost/asio/detail/timer_queue_ptime.hpp:22:
In file included from /ceph-inst/src/boost/boost/asio/time_traits.hpp:23:
In file included from /ceph-inst/src/boost/boost/date_time/posix_time/posix_time_types.hpp:16:
In file included from /ceph-inst/src/boost/boost/date_time/posix_time/posix_time_duration.hpp:15:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/cast.hpp:33:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/converter.hpp:13:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/conversion_traits.hpp:13:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/detail/conversion_traits.hpp:18:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/detail/int_float_mixture.hpp:19:
In file included from /ceph-inst/src/boost/boost/mpl/integral_c.hpp:32:
/ceph-inst/src/boost/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: non-type template argument is not a constant expression
73 | typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/ceph-inst/src/boost/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
24 | # define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
| ^
/ceph-inst/src/boost/boost/mpl/integral_c.hpp:31:54: note: expanded from macro 'AUX_WRAPPER_INST'
31 | #define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >
| ^~~~~
/ceph-inst/src/boost/boost/numeric/conversion/detail/meta.hpp:30:46: note: in instantiation of template class 'mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>' requested here
30 | enum { x = ( BOOST_MPL_AUX_VALUE_WKND(T1)::value == BOOST_MPL_AUX_VALUE_WKND(T2)::value ) };
| ^
/ceph-inst/src/boost/boost/mpl/if.hpp:63:68: note: in instantiation of template class 'boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>>' requested here
63 | BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
| ^
/ceph-inst/src/boost/boost/mpl/eval_if.hpp:37:22: note: in instantiation of template class 'boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>>, boost::mpl::identity<boost::numeric::convdetail::get_subranged_BuiltIn2BuiltIn<long, unsigned int>>, boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_udt>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::subranged_BuiltIn2Udt<long, unsigned int>>>, boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::udt_to_builtin>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2BuiltIn<long, unsigned int>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2Udt<long, unsigned int>>>>>' requested here
37 | typedef typename if_<C,F1,F2>::type f_;
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/meta.hpp:81:12: note: in instantiation of template class 'boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>>, boost::mpl::identity<boost::numeric::convdetail::get_subranged_BuiltIn2BuiltIn<long, unsigned int>>, boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_udt>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::subranged_BuiltIn2Udt<long, unsigned int>>>, boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::udt_to_builtin>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2BuiltIn<long, unsigned int>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2Udt<long, unsigned int>>>>>' requested here
81 | mpl::eval_if<is_case0,Case0TypeQ,choose_1_2_3Q>::type
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp:41:7: note: in instantiation of template class 'boost::numeric::convdetail::ct_switch4<mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_builtin>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::builtin_to_udt>, mpl_::integral_c<boost::numeric::udt_builtin_mixture_enum, boost::numeric::udt_to_builtin>, boost::numeric::convdetail::get_subranged_BuiltIn2BuiltIn<long, unsigned int>, boost::mpl::identity<boost::numeric::convdetail::subranged_BuiltIn2Udt<long, unsigned int>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2BuiltIn<long, unsigned int>>, boost::mpl::identity<boost::numeric::convdetail::subranged_Udt2Udt<long, unsigned int>>>' requested here
41 | ct_switch4<UdtMixture
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/is_subranged.hpp:205:9: note: (skipping 3 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
205 | for_udt_builtin_mixture<udt_builtin_mixture, BuiltIn2BuiltInQ, BuiltIn2UdtQ, Udt2BuiltInQ, Udt2UdtQ>::type
| ^
/ceph-inst/src/boost/boost/numeric/conversion/conversion_traits.hpp:22:7: note: in instantiation of template class 'boost::numeric::convdetail::non_trivial_traits_impl<long, unsigned int>' requested here
22 | : convdetail::get_conversion_traits<T,S>::type
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/converter.hpp:584:22: note: in instantiation of template class 'boost::numeric::conversion_traits<long, unsigned int>' requested here
584 | typedef typename Traits::trivial trivial ;
| ^
/ceph-inst/src/boost/boost/numeric/conversion/converter.hpp:29:32: note: in instantiation of template class 'boost::numeric::convdetail::get_converter_impl<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::UseInternalRangeChecker>' requested here
29 | struct converter : convdetail::get_converter_impl<Traits,
| ^
/ceph-inst/src/boost/boost/numeric/conversion/cast.hpp:53:16: note: in instantiation of template class 'boost::numeric::converter<long, unsigned int, boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>>' requested here
53 | return converter::convert(arg);
| ^
/ceph-inst/src/boost/boost/date_time/posix_time/posix_time_duration.hpp:31:21: note: in instantiation of function template specialization 'boost::numeric_cast<long, unsigned int>' requested here
31 | time_duration(numeric_cast<hour_type>(h), 0, 0)
| ^
/ceph-inst/src/boost/boost/mpl/aux_/integral_wrapper.hpp:73:31: note: integer value -1 is outside the valid range of values [0, 3] for the enumeration type 'udt_builtin_mixture_enum'
73 | typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
| ^
/ceph-inst/src/boost/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
24 | # define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
| ^
In file included from /ceph-inst/src/rgw/rgw_s3select.cc:4:
In file included from /ceph-inst/src/rgw/rgw_s3select_private.h:11:
In file included from /ceph-inst/src/common/ceph_crypto.h:10:
In file included from /ceph-inst/src/include/types.h:21:
In file included from /ceph-inst/src/include/uuid.h:9:
In file included from /ceph-inst/src/include/encoding.h:41:
In file included from /ceph-inst/src/include/denc.h:51:
In file included from /ceph-inst/src/common/error_code.h:22:
In file included from /ceph-inst/src/boost/boost/asio.hpp:25:
In file included from /ceph-inst/src/boost/boost/asio/basic_deadline_timer.hpp:25:
In file included from /ceph-inst/src/boost/boost/asio/detail/deadline_timer_service.hpp:29:
In file included from /ceph-inst/src/boost/boost/asio/detail/timer_queue_ptime.hpp:22:
In file included from /ceph-inst/src/boost/boost/asio/time_traits.hpp:23:
In file included from /ceph-inst/src/boost/boost/date_time/posix_time/posix_time_types.hpp:16:
In file included from /ceph-inst/src/boost/boost/date_time/posix_time/posix_time_duration.hpp:15:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/cast.hpp:33:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/converter.hpp:13:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/conversion_traits.hpp:13:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/detail/conversion_traits.hpp:18:
In file included from /ceph-inst/src/boost/boost/numeric/conversion/detail/int_float_mixture.hpp:19:
In file included from /ceph-inst/src/boost/boost/mpl/integral_c.hpp:32:
/ceph-inst/src/boost/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: non-type template argument is not a constant expression
73 | typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/ceph-inst/src/boost/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
24 | # define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
| ^
/ceph-inst/src/boost/boost/mpl/integral_c.hpp:31:54: note: expanded from macro 'AUX_WRAPPER_INST'
31 | #define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >
| ^~~~~
/ceph-inst/src/boost/boost/numeric/conversion/detail/meta.hpp:30:46: note: in instantiation of template class 'mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>' requested here
30 | enum { x = ( BOOST_MPL_AUX_VALUE_WKND(T1)::value == BOOST_MPL_AUX_VALUE_WKND(T2)::value ) };
| ^
/ceph-inst/src/boost/boost/mpl/if.hpp:63:68: note: in instantiation of template class 'boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>>' requested here
63 | BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
| ^
/ceph-inst/src/boost/boost/mpl/eval_if.hpp:37:22: note: in instantiation of template class 'boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>, boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_float>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>, boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::float_to_integral>>, boost::mpl::identity<boost::numeric::convdetail::rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::Trunc<unsigned int>>>, boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>>>' requested here
37 | typedef typename if_<C,F1,F2>::type f_;
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/meta.hpp:81:12: note: in instantiation of template class 'boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>, boost::mpl::eval_if<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_float>>, boost::mpl::identity<boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>, boost::mpl::if_<boost::numeric::convdetail::equal_to<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::float_to_integral>>, boost::mpl::identity<boost::numeric::convdetail::rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::Trunc<unsigned int>>>, boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>>>' requested here
81 | mpl::eval_if<is_case0,Case0TypeQ,choose_1_2_3Q>::type
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/int_float_mixture.hpp:59:7: note: in instantiation of template class 'boost::numeric::convdetail::ct_switch4<mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_integral>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::integral_to_float>, mpl_::integral_c<boost::numeric::int_float_mixture_enum, boost::numeric::float_to_integral>, boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>, boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>, boost::mpl::identity<boost::numeric::convdetail::rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::Trunc<unsigned int>>>, boost::mpl::identity<boost::numeric::convdetail::non_rounding_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::convdetail::dummy_range_checker<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>>>>' requested here
59 | ct_switch4<IntFloatMixture
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/converter.hpp:550:7: note: (skipping 1 context in backtrace; use -ftemplate-backtrace-limit=0 to see all)
550 | for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type
| ^
/ceph-inst/src/boost/boost/mpl/eval_if.hpp:38:22: note: in instantiation of template class 'boost::numeric::convdetail::get_non_trivial_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::UseInternalRangeChecker>' requested here
38 | typedef typename f_::type type;
| ^
/ceph-inst/src/boost/boost/numeric/conversion/detail/converter.hpp:586:27: note: in instantiation of template class 'boost::mpl::eval_if<mpl_::bool_<false>, boost::mpl::identity<boost::numeric::convdetail::trivial_converter_impl<boost::numeric::conversion_traits<long, unsigned int>>>, boost::numeric::convdetail::get_non_trivial_converter<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::UseInternalRangeChecker>>' requested here
586 | typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;
| ^
/ceph-inst/src/boost/boost/numeric/conversion/converter.hpp:29:32: note: in instantiation of template class 'boost::numeric::convdetail::get_converter_impl<boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>, boost::numeric::raw_converter<boost::numeric::conversion_traits<long, unsigned int>>, boost::numeric::UseInternalRangeChecker>' requested here
29 | struct converter : convdetail::get_converter_impl<Traits,
| ^
/ceph-inst/src/boost/boost/numeric/conversion/cast.hpp:53:16: note: in instantiation of template class 'boost::numeric::converter<long, unsigned int, boost::numeric::conversion_traits<long, unsigned int>, boost::numeric::def_overflow_handler, boost::numeric::Trunc<unsigned int>>' requested here
53 | return converter::convert(arg);
| ^
/ceph-inst/src/boost/boost/date_time/posix_time/posix_time_duration.hpp:31:21: note: in instantiation of function template specialization 'boost::numeric_cast<long, unsigned int>' requested here
31 | time_duration(numeric_cast<hour_type>(h), 0, 0)
| ^
/ceph-inst/src/boost/boost/mpl/aux_/integral_wrapper.hpp:73:31: note: integer value -1 is outside the valid range of values [0, 3] for the enumeration type 'int_float_mixture_enum'
73 | typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
| ^
/ceph-inst/src/boost/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
24 | # define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
| ^
I build the ceph project which included boost and compiled it from sources.
While building I encountered with compile error - non-type template argument is not a constant expression.
I use the clang++-20 compiler on Astra Linux 1.8 (Debian 13).
Note: compilation with clang++-14 was done without errors.
Can you fix this error for support clang > 14, please?
Build command:
Error output: