/*! @file Defines `boost::hana::common` and `boost::hana::common_t`. @copyright Louis Dionne 2013-2017 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_HANA_CORE_COMMON_HPP #define BOOST_HANA_CORE_COMMON_HPP #include #include #include #include #include #include #include #include BOOST_HANA_NAMESPACE_BEGIN ////////////////////////////////////////////////////////////////////////// // common ////////////////////////////////////////////////////////////////////////// //! @cond template struct common : common> { }; //! @endcond template struct common> : detail::std_common_type { }; template struct common { using type = T; }; ////////////////////////////////////////////////////////////////////////// // has_common ////////////////////////////////////////////////////////////////////////// template struct has_common : std::false_type { }; template struct has_common::type>> : std::true_type { }; ////////////////////////////////////////////////////////////////////////// // Provided common data types for Constants ////////////////////////////////////////////////////////////////////////// namespace constant_detail { //! @todo //! This is an awful hack to avoid having //! @code //! common, integral_constant_tag> //! == //! CanonicalConstant //! @endcode template struct which { using type = detail::CanonicalConstant; }; template