*免责声明。加点盐吧,我绝不是 Boost Concept 专家。
它用于使编译器实例化“模型”析构函数以使编译器为概念失败生成错误。
usage_requirements
与BOOST_CONCEPT_USAGE
which 在创建新概念时一起使用,请参阅文档中的创建概念。
# define BOOST_CONCEPT_USAGE(model) \
model(); /* at least 2.96 and 3.4.3 both need this :( */ \
BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \
~model()
使用如下:
BOOST_CONCEPT_USAGE(InputIterator)
{
X j(i); // require copy construction
same_type(*i++,v); // require postincrement-dereference returning value_type
X& x = ++j; // require preincrement returning X&
}
最终会像:
model(); /* at least 2.96 and 3.4.3 both need this :( */ \
BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \
~model()
{
X j(i); // require copy construction
same_type(*i++,v); // require postincrement-dereference returning value_type
X& x = ++j; // require preincrement returning X&
}
如您所见,概念需求最终出现在model
析构函数中。这就是为什么我们需要欺骗编译器来实例化它。