#ifndef glas_concept_concept_hpp #define glas_concept_concept_hpp #include #include #include #include #include #ifdef GLAS_COMPLEX # include #endif namespace glas { namespace detail { template struct concept_default { typedef typename T::concept_type type ; } ; template <> struct concept_default { typedef boost::mpl::vector< expression_concept > type ; } ; template <> struct concept_default { typedef boost::mpl::vector< expression_concept > type ; } ; #ifdef GLAS_COMPLEX template struct concept_default< std::complex > { typedef boost::mpl::vector< expression_concept > type ; } ; #endif } ; // It T is a const type, remove the const because concept is // specialized for non-const types only. template struct concept : boost::mpl::eval_if< boost::is_const , concept::type> , detail::concept_default > {} ; } #endif // glas_meta_concept_hpp