Possible Duplicate:
Unnamed/anonymous namespaces vs. static functions
Is this completely redundant, or may there be a reason to do this?
namespace {
static void f() {
...
}
}
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
It looks redundant to me — either being declared static or being in an anonymous namespace means it has internal linkage.
§3.5/3:
§3.5/4:
So, as it is right now, it has internal linkage because it’s explicitly declared static. If it wasn’t explicitly declared static, it would have internal linkage because it’s declared inside an unnamed namespace. Same effect either way.
Note that here I’m replying specifically about a function — there are a few obscure cases where there’s a difference when you’re dealing with the name of a type (e.g., class/struct/union), but I don’t know of any such thing that applies in the case of a function.
As far as what internal linkage really means, that’s one of those places the standard is actually quite direct and clear. It’s probably best to quote the definitions of all three possibilities (§3.5/2):
Note that the italics above match those in the standard, which is its way of saying that these sentences define what those phrases mean throughout the rest of the standard.