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

Reply via email to