#pragma once #include #include #define AMDIS_CONCAT_IMPL( x, y ) x##y #define AMDIS_MACRO_CONCAT( x, y ) AMDIS_CONCAT_IMPL( x, y ) #ifdef DOXYGEN #define REQUIRES(...) #define REQUIRES_(...) #define CONCEPT constexpr #define CHECK_CONCEPT(...) #else #define REQUIRES(...) std::enable_if_t<__VA_ARGS__ , int> = 0 #define REQUIRES_(...) std::enable_if_t<__VA_ARGS__ , int> #define CONCEPT constexpr #define CHECK_CONCEPT(...) static __VA_ARGS__ AMDIS_MACRO_CONCAT( _concept_check_, __COUNTER__ ) #endif namespace AMDiS { using Dune::void_t; namespace Concepts { namespace Impl_ { template > struct models : std::false_type {}; template struct models().require(std::declval()...)) >> : std::true_type {}; } // end namespace Impl_ #ifndef DOXYGEN template constexpr bool models = Impl_::models::value; template using models_t = Impl_::models; #endif // DOXYGEN } // end namespace Concepts } // end namespace AMDiS