成员函数的 pragma GCC 毒语法
pragma GCC poison syntax for member function
在 GCC(和 clang)中有这个选项可以使函数中毒:
#include <stdio.h>
#pragma GCC poison puts
int main() {
puts("a");
}
毒害模板成员函数的语法是什么class?
我尝试了以下选项,但我什至没能让它对非模板 class 成员有效。
#include <stdio.h>
#pragma GCC poison puts
struct A{
bool operator==(A const& o){return true;}
};
#pragma GCC poison A::operator== //not working
template<class T>
struct B{
bool operator==(B const& o){return true;}
};
#pragma GCC poison template<class T> B<T>::operator== //not working either
int main() {
puts("a");
}
我不认为有这样的语法。 documentation 表示 #pragma GCC poison
是预处理器本身的一部分;事实上,GCC 文档甚至没有提到它。
这意味着它只适用于预处理器理解的东西,即标识符标记。像 A::operator==
这样的东西是四个独立的标记:A
、::
、operator
、==
。其中你只能毒害 A
和 operator
;预处理器不理解范围或 类,更不用说模板了。
在 GCC(和 clang)中有这个选项可以使函数中毒:
#include <stdio.h>
#pragma GCC poison puts
int main() {
puts("a");
}
毒害模板成员函数的语法是什么class?
我尝试了以下选项,但我什至没能让它对非模板 class 成员有效。
#include <stdio.h>
#pragma GCC poison puts
struct A{
bool operator==(A const& o){return true;}
};
#pragma GCC poison A::operator== //not working
template<class T>
struct B{
bool operator==(B const& o){return true;}
};
#pragma GCC poison template<class T> B<T>::operator== //not working either
int main() {
puts("a");
}
我不认为有这样的语法。 documentation 表示 #pragma GCC poison
是预处理器本身的一部分;事实上,GCC 文档甚至没有提到它。
这意味着它只适用于预处理器理解的东西,即标识符标记。像 A::operator==
这样的东西是四个独立的标记:A
、::
、operator
、==
。其中你只能毒害 A
和 operator
;预处理器不理解范围或 类,更不用说模板了。