From c4cba6086bc4d3080c4e6bf1d69662e3fad0437e Mon Sep 17 00:00:00 2001 From: Khomutov Nikita Date: Mon, 10 Feb 2020 13:39:12 +0300 Subject: [PATCH] Create default.cpp The test is related to issues #91 and #95 . It is a regression introduced to 1.71 release on compilers supporting C++11. Since 1.71 the result of `Params::foo_t` is `B` which means that provided parameter `type_foo_param` (set to `A`) is dropped and failed back to default one (`B`). --- test/default.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/default.cpp diff --git a/test/default.cpp b/test/default.cpp new file mode 100644 index 00000000..1470ef6f --- /dev/null +++ b/test/default.cpp @@ -0,0 +1,64 @@ +#include +#include + +#if __cplusplus >= 201103L + #include +#else // C++03 + #include + #include + #include + #include +#endif + + +BOOST_PARAMETER_TEMPLATE_KEYWORD(type_foo_param) +BOOST_PARAMETER_TEMPLATE_KEYWORD(type_bar_param) + +class A {}; +class B {}; +class C {}; + + +#if __cplusplus >= 201103L + template + class DefaultParams + { + public: + typedef typename boost::parameter::parameters< + boost::parameter::optional + >::bind::type args; + + typedef typename boost::parameter::value_type< + args, tag::type_foo_param, B + >::type foo_t; + }; +#else // C++03 + template + class DefaultParams + { + public: + typedef typename boost::parameter::parameters< + boost::parameter::optional + >::bind::type args; + + typedef typename boost::parameter::value_type< + args, tag::type_foo_param, B + >::type foo_t; + }; +#endif + +void test() +{ + typedef DefaultParams< + type_bar_param, + type_foo_param + > Params; + +#if __cplusplus >= 201103L + static_assert(std::is_same::value, "Expected A type"); + static_assert(!std::is_same::value, "Failing back to default value is not allowed here"); +#else // C++03 + BOOST_MPL_ASSERT(( boost::is_same )); + BOOST_MPL_ASSERT(( boost::mpl::not_< boost::is_same > )); +#endif +}