diff --git a/test/boost_no_cxx14_constexpr.ipp b/test/boost_no_cxx14_constexpr.ipp index 5dd43dfa..cc655270 100644 --- a/test/boost_no_cxx14_constexpr.ipp +++ b/test/boost_no_cxx14_constexpr.ipp @@ -1,5 +1,5 @@ -// (C) Copyright Kohei Takahashi 2014 +// (C) Copyright Kohei Takahashi 2014,2016 // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file @@ -17,6 +17,15 @@ namespace boost_no_cxx14_constexpr namespace detail { template struct void_ { typedef void type; }; + + struct non_tmpl + { + constexpr int foo() const { return 1; } + constexpr int foo() { return 0; } + }; + + template + struct tmpl : non_tmpl { }; } // Test relaxed constexpr with dependent type; for more details, see comment of @@ -27,6 +36,17 @@ constexpr typename detail::void_::type decrement(T &value) --value; } +constexpr int non_cv_member(detail::non_tmpl x) +{ + return x.foo(); +} + +template +constexpr int non_cv_member(detail::tmpl x) +{ + return x.foo(); +} + constexpr int zero() { int ret = 1; @@ -34,9 +54,18 @@ constexpr int zero() return ret; } +template struct compile_time_value +{ + static constexpr int value = v; +}; + int test() { - return zero(); + return compile_time_value< + zero() + + non_cv_member(detail::non_tmpl()) + + non_cv_member(detail::tmpl()) + >::value; } }