Reputation: 361772
The section $7.3.1.1/2 from the C++ Standard reads:
The use of the static keyword is deprecated when declaring objects in a namespace scope; the unnamed-namespace provides a superior alternative.
I don't understand why an unnamed namespace is considered a superior alternative? What is the rationale? I've known for a long time as to what the standard says, but I've never seriously thought about it, even when I was replying to this question: Superiority of unnamed namespace over static?
Is it considered superior because it can be applied to user-defined types as well, as I described in my answer? Or is there some other reason as well, that I'm unaware of? I'm asking this, particularly because that is my reasoning in my answer, while the standard might have something else in mind.
Upvotes: 115
Views: 47537
Reputation: 300359
There are two reasons I think:
static
has two different meanings: at class scope, it means shared by the whole class while at file/function scope it affects the visibility/storage...struct
, class
and typedef
One note though, the commitee backpedaled on this: static
is no longer marked as deprecated in n3225
.
Upvotes: 6
Reputation: 24919
static
means too many things already.Upvotes: 130
Reputation: 994659
One reason may be that static
already has too many meanings (I can count at least three). Since an anonymous namespace can encapsulate anything including types, it seems superior to the static
solution.
Upvotes: 11