5.2.31 · HinglishC++ Programming

Inline namespaces, anonymous namespaces

1,806 words8 min readRead in English

5.2.31 · Coding › C++ Programming


WHY ye exist karte hain?


Anonymous (unnamed) namespaces

// file_a.cpp
namespace {            // <-- no name
    int secret = 42;
    int helper() { return secret * 2; }
}
int useIt() { return helper(); }   // OK, same file

Inline namespaces

namespace lib {
    inline namespace v2 {      // current version
        void process() { /* new code */ }
    }
    namespace v1 {             // old version, NOT inline
        void process() { /* old code */ }
    }
}
Figure — Inline namespaces, anonymous namespaces

Worked examples


Common mistakes


Recall Feynman: 12-saal ke bacche ko samjhao

Socho ek school mein bahut saare classrooms hain. Anonymous namespace ek secret note hai jo tum EK classroom ke andar rakhte ho — doosre rooms ke bacche use nahi dekh sakte, aur agar do rooms mein "plan" naam ka note bhi ho, woh kabhi mix nahi hote. Inline namespace aise hai jaise kahein: "homework folder ka naaya version default folder hai." Jab koi bas "homework" maange, use latest mil jaata hai automatically — lekin agar specifically "last year's homework" maange, woh bhi mil sakta hai. Next year ka default banane ke liye, teacher bas "default" label naye folder par laga deta hai.


Recall

Flashcards

Anonymous namespace mein names ko kaunsi linkage milti hai?
Internal linkage — sirf apne translation unit mein visible hote hain.
Compiler unnamed namespace ke liye conceptually kya karta hai?
Har TU ke liye ek unique hidden naam banata hai aur ek implicit using directive add karta hai, taaki har file ki copy distinct rahe.
Internal linkage ke liye anonymous namespace ko static se kyun prefer karein?
Yeh uniformly variables, functions, AUR types/templates/enums ke liye kaam karta hai, sirf functions aur variables ke liye nahi.
Anonymous namespaces headers se bahar kyun rakhni chahiye?
Har include karne wale TU ko apni alag internal-linkage copy milti hai, duplication aur broken shared state hota hai.
inline namespace apne members ke saath kya karta hai?
Unhe enclosing namespace mein unqualified visible banata hai, jaise ek level upar declare kiye gaye hon; lookup, ADL, aur specialization ke liye woh same entity ban jaate hain.
Jab v2 inline ho, toh lib::process() kya resolve karta hai?
lib::v2::process() — callers automatically newest version par float karte hain.
Inline version use karte hue purane callers ko kaise kaam karta rakhte ho?
Purana namespace (jaise v1) non-inline rakhte hain; users ab bhi lib::v1::... explicitly call kar sakte hain.
Inline namespace ka naam mangled symbol mein kyun appear karta hai?
ABI versioning ke liye — alag versions ke against built objects distinct rehte hain taaki galat version silently link na ho sake.
Kya namespace par inline function par inline se related hai?
Nahi — same keyword, alag meaning (versioning/visibility vs ODR/linkage of definitions).

Connections

  • Namespaces (basics)
  • Translation units and the One Definition Rule
  • Internal vs external linkage
  • static keyword (storage & linkage)
  • Argument-Dependent Lookup (ADL)
  • Name mangling and the ABI
  • API versioning strategies

Concept Map

solves

solves

fixed by

fixed by

gives

means

compiler adds

causes

modern form of

makes

enables

allows

Namespaces group names

File leakage / ODR clash

Evolving an API

Anonymous namespace

Inline namespace

Internal linkage

Visible only in one TU

Hidden unique name per file

Replaces C static

Members leak to enclosing ns

API versioning v1 / v2

ADL sees through it