我刚刚开始做概念。检查表达式的语法非常有用,它使我摆脱了sfinae的许多重复样板。但是我想知道如何检查表达式是否可以在constexpr上下文中使用。有时,这些表达导致无效。我可以想象的方式看起来像这样,没有注释constexpr关键字:
template<typename T>
concept foo = requires(T t) {
/* constexpr */ { t.bar(); } -> std::same_as<void>;
/* constepxr */ { T::foo; };
}
但是,我高度怀疑这是正确的语法。有没有一种简单的方法可以检查概念中表达式的可表达性?
我不想检查constexpr函数的求值是否不会因为t
的所有可能值而失败,我想知道是否可以将该表达式放在编译器期望的地方以便在编译时进行评估。