代码之家  ›  专栏  ›  技术社区  ›  alfC

成员函数的pragma GCC poison语法

  •  0
  • alfC  · 技术社区  · 5 年前

    在GCC(和clang)中,有一个选项可以毒害函数:

    #include <stdio.h>
    #pragma GCC poison puts
    
    int main() {
        puts("a");
    }
    

    我尝试了以下选项,我甚至没有设法使它为非模板类成员工作。

    #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");
    }
    

    https://godbolt.org/z/rBEgjZ

    0 回复  |  直到 5 年前
        1
  •  2
  •   melpomene    5 年前

    我不认为有这样的语法。这个 documentation #pragma GCC poison 是预处理器本身的一部分;实际上,GCC文档甚至没有提到它。

    A::operator== 是四个独立的令牌: A , :: , operator == . 这些你只能下毒 操作人员 ;预处理器不理解作用域或类,更不用说模板了。