Daily bit(e) C++. Встроенные пространства имен
Добавлено 18 сентября 2026 в 05:14
Daily bit(e) C++ 109, инструмент версионирования символов в C++11 – встроенные (inline) пространства имен.

Встроенные (inline) пространства имен в C++11 невидимы для кода, но влияют на имена символов.
Благодаря этому они служат отличным инструментом для версионирования символов при внесении изменений, нарушающих ABI.
#pragma once
// library.h
// Реализация Library:
// Более старые версии можно сохранить (по возможности),
// обеспечив тем самым бинарную совместимость.
// Если же их удалить, то компиляция с использованием старого
// заголовочного файла и новой бинарной версии приведет к ошибке линковки.
namespace Library
{
namespace v1
{
void function()
{
std::cout << "Hello World! v1\n";
}
}
inline namespace v2
{
void function()
{
std::cout << "Hello World! v2\n";
}
}
}
// main.cpp
#include <iostream>
#include "library.h"
int main() {
Library::function(); // Будет использовать Library::v2::function();
// напечатает: "Hello World! v2"
Library::v1::function();
// напечатает: "Hello World! v1"
}
