What should ellipsis in attribute-list in C++ be used for?
Asked Answered
N

1

11

In C++ reference I found information about allowed syntax of attributes in C++, it is:

[[attribute-list]]
[[ using attribute-namespace : attribute-list ]]

"where attribute-list is a comma-separated sequence of zero or more attributes (possibly ending with an ellipsis ... indicating a pack expansion)"

I've tried to use its, but I see no difference between:

[[deprecated]] void f() 
{
}

and

[[deprecated...]] void f() 
{
}

In both cases output is the same.

Nostology answered 25/2, 2018 at 23:56 Comment(4)
(possibly ending with an ellipsis ... indicating a pack expansion) is what the reference says. When you could use it? No idea, it's an underdeveloped feature imho... Perhaps the grammar allows it for future expansions.Barricade
I believe this paper may be relevant.Reynaldoreynard
I wonder why does [[deprecated...]] even compile if there are no packs to expand.Iveson
You may find this video to be relevantBulahbulawayo
O
2

This was added to the specification for consistency and also because the future of attributes is still being discussed. Considering that we currently have pack expansion in variadic templates (see Variadic template pack expansion) like this:

// pack expansion in function arguments
template <typename... Args>
void f(Args... args) {}

// pack expansion in inheritance
template <typename... Inherited>
struct MyClass : Inherited... {};

Along the same lines, it also makes sense to think about pack expansion for attributes. A few example scenarios could be:

template <typename... Ts>
class [[Ts...]] MyClass {};

or

template <typename... Ts>
class [[Ts()...]] MyClass {};

But, again, this is only in the specification and currently there is no attribute that can be used like that.

Octonary answered 2/9, 2018 at 1:39 Comment(2)
Both examples of how they could be used fail to compile on GCC and clang even without instantiation. Is this expected?Qintar
But... how is a type an attribute? godbolt.org/z/TMz56hesbDiphenyl

© 2022 - 2024 — McMap. All rights reserved.