/* @file native_bpu_concept.hpp */ #pragma once #include "ratio_concept.hpp" #include "dim_util.hpp" #include namespace xo { namespace unit { /** * e.g. see native_bpu> * * bpu short for 'basis power unit'. * * NOTE: in typical c++ use, there won't be a reason to declare * a variable of type NativeBpu. Instead will appear * as a template argument. **/ template concept native_bpu_concept = requires(NativeBpu bpu) { typename NativeBpu::scalefactor_type; typename NativeBpu::power_type; // NativeBpu::c_native_dim :: native_dim_id // NativeBpu::c_scale :: std::intmax_t // NativeBpu::num :: int // NativeBpu::den :: int } && ((std::is_same_v) && ratio_concept && ratio_concept && (std::is_signed_v) && (std::is_signed_v)) // && std::copyable ; } /*namespace unit*/ } /*namespace xo*/ /* end native_bpu_concept.hpp */