https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96516
--- Comment #3 from sagebar at web dot de --- No problem. Also: What you just said made me realize that once __attribute__((copy)) works correctly with templates, _any_ attribute that can be inherited via copy() can be made template-conditional in c++: ``` template<bool B> struct conditional_returns_nonnull { static __attribute__((returns_nonnull)) void *func(void); }; template<> struct conditional_returns_nonnull<false> { static void *func(void); }; template<bool B> __attribute__((copy(conditional_returns_nonnull<B>::func))) void *function_with_conditional_returns_nonnull_attribute(); #define SASS(x) static_assert(x, #x) SASS(!__builtin_has_attribute( conditional_returns_nonnull<false>::func, returns_nonnull)); SASS(__builtin_has_attribute( conditional_returns_nonnull<true>::func, returns_nonnull)); SASS(!__builtin_has_attribute( function_with_conditional_returns_nonnull_attribute<false>, returns_nonnull)); SASS(__builtin_has_attribute( function_with_conditional_returns_nonnull_attribute<true>, returns_nonnull)); ``` Currently, this doesn't compile due to the last `static_assert()' failing (Which I'm guessing is due to the same bug) -> So I guess: Here's another test