C++ glibcxx函数需要和glibcxx需要有效范围宏如何工作?
请您向我解释一下,它们是如何工作的,它们在做什么?当定义了C++ glibcxx函数需要和glibcxx需要有效范围宏如何工作?,c++,stl,macros,accumulate,C++,Stl,Macros,Accumulate,请您向我解释一下,它们是如何工作的,它们在做什么?当定义了\u GLIBCXX\u概念检查时,也是这样 #define __glibcxx_function_requires(...) # define __glibcxx_requires_valid_range(_First,_Last) #定义u_uglibcxx_函数u需要(…)\ __gnu_cxx::u函数_需要(); 因此,您发布的代码: #define __glibcxx_function_requires(...)
\u GLIBCXX\u概念检查时,也是这样
#define __glibcxx_function_requires(...)
# define __glibcxx_requires_valid_range(_First,_Last)
#定义u_uglibcxx_函数u需要(…)\
__gnu_cxx::u函数_需要();
因此,您发布的代码:
#define __glibcxx_function_requires(...) \
__gnu_cxx::__function_requires< __gnu_cxx::__VA_ARGS__ >();
\u glibcxx\u函数\u需要(\u InputIteratorConcept)
决议如下:
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
\uuuu gnu\ucxx::\uu函数需要();
其中内联到:
__gnu_cxx::__function_requires< _InputIteratorConcept<_InputIterator> >();
void(_InputIteratorConcept::*ux)(_IsUnused=&_InputIteratorConcept::u约束;
这将强制实例化\u InputIterator Concept::\u约束
,当\u InputIterator
与迭代器不相似时,它使用类型定义
中断编译
\u glibcxx\u需要有效范围
根据迭代器类型,使用类似的技术调用函数。适当时(足够快),它将断言\uuu last
在\uu first
之后
__gnu_cxx::__function_requires< _InputIteratorConcept<_InputIterator> >();
void (_InputIteratorConcept<_InputIterator>::*__x)() _IsUnused = &_InputIteratorConcept<_InputIterator>::__constraints;