有没有办法检测某个函数是否附加了某个属性?
我想专门化一个模板类,它的模板参数是一个具有明确定义方法的类型,基于该方法的属性。
例如,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属性?