下列程式码不会编译:
struct FooImpl {
using Bar = int;
void method(Bar&) {}
};
template <typename F>
concept Foo = requires(F f) {
{ f.method(typename F::Bar{}) };
};
static_assert(Foo<FooImpl>);
此问题来自FooImple::method()
声明中的&
。删除&
可修复此问题。
我不想修改FooImpl
,而想修改Foo
。我如何修改概念实现以满足static_assert
?
1条答案
按热度按时间qni6mghb1#
如果此概念的目的是查看
F
是否有一个名为method
的成员函数,该函数可以接受F::Bar
类型的左值,则您要编写的内容是:如果也没有
typename F::Bar
(即Foo<int>
是false
,而不是格式错误),则此操作将正常失败。