如何在编译时检测C ++函数属性?

时间:2018-03-16 14:18:44

标签: c++ c++11 gcc

有没有办法检测某个函数是否附加了某个属性?

我想专门化一个模板类,它的模板参数是一个具有明确定义方法的类型,基于该方法的属性。

例如,GCC具有__attribute__(noreturn)等属性,而C ++ 11具有[[noreturn]]等属性。

我想通过我的模板传播这些属性:

template <typename T>
struct Proxy {
  void call() {
    T::call();
  }
};

类似

template <typename T>
struct Proxy {
  [[noreturn if_has_attribute(noreturn, T::call)]] 
  void call() {
    T::call();
  }
};

template <typename T>
struct Proxy {
  [[copy_attrbiutes_from(T::call)]] 
  void call() {
    T::call();
  }
};

或通过一些模板专业化。

那么,是否有任何(可能是constexpr)方法来检测函数的属性? 是GCC属性还是标准C ++ 11属性?

0 个答案:

没有答案