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 +}