C++ 概念:对函数概念的无效引用
C++ Concepts : invalid reference to function concept
我尝试了从概念技术规范修改的一小段代码:
template < typename T >
concept bool C_Object() {
return requires {
T();
};
}
template < typename Object >
requires C_Object<Object>
class Foo {
public:
Object test;
};
struct Component {
int data;
Component() : data(0) {}
};
int main() {
Foo<Component> test;
return 0;
}
但是我得到这个错误:
test.cpp:10:12: error: invalid reference to function concept ‘template<class T> concept bool C_Object()’
requires C_Object<Object>
^~~~~~~~~~~~~~~~
test.cpp: In function ‘int main()’:
test.cpp:26:16: error: template constraint failure
Foo<Component> test;
^
test.cpp:26:16: note: constraints not satisfied
test.cpp:26:16: note: ill-formed constraint
第一次尝试新版C++概念,我哪里漏了?
谢谢
祝你有美好的一天
这个定义:
template < typename T >
concept bool C_Object() {
return requires {
T();
};
}
将C_Object
定义为函数概念。这个:
template < typename Object >
requires C_Object<Object>
class Foo {
public:
Object test;
};
使用C_Object
就好像它是一个可变的概念。在 requires 子句中,必须使用 ()
到 "invoke" 函数概念:
template < typename Object >
requires C_Object<Object>()
class Foo {
public:
Object test;
};
或者,您可以使用 "terse" 占位符语法来约束 Object
,它不区分变量和函数概念:
template < C_Object Object >
class Foo {
public:
Object test;
};
我尝试了从概念技术规范修改的一小段代码:
template < typename T >
concept bool C_Object() {
return requires {
T();
};
}
template < typename Object >
requires C_Object<Object>
class Foo {
public:
Object test;
};
struct Component {
int data;
Component() : data(0) {}
};
int main() {
Foo<Component> test;
return 0;
}
但是我得到这个错误:
test.cpp:10:12: error: invalid reference to function concept ‘template<class T> concept bool C_Object()’
requires C_Object<Object>
^~~~~~~~~~~~~~~~
test.cpp: In function ‘int main()’:
test.cpp:26:16: error: template constraint failure
Foo<Component> test;
^
test.cpp:26:16: note: constraints not satisfied
test.cpp:26:16: note: ill-formed constraint
第一次尝试新版C++概念,我哪里漏了?
谢谢
祝你有美好的一天
这个定义:
template < typename T >
concept bool C_Object() {
return requires {
T();
};
}
将C_Object
定义为函数概念。这个:
template < typename Object >
requires C_Object<Object>
class Foo {
public:
Object test;
};
使用C_Object
就好像它是一个可变的概念。在 requires 子句中,必须使用 ()
到 "invoke" 函数概念:
template < typename Object >
requires C_Object<Object>()
class Foo {
public:
Object test;
};
或者,您可以使用 "terse" 占位符语法来约束 Object
,它不区分变量和函数概念:
template < C_Object Object >
class Foo {
public:
Object test;
};