Не переопределяйте зарезервированные идентификаторы

Не объявляейте и не определяйте имена, используемые в стандартной библиотеке. Любые имена содержащие двойное подчеркивание или начинающиеся со знака подчеркивания, за которым следует заглавная буква зарезервированы для реализации (для нужд компилятора или стандартной библиотеки). Любые имена в глобальном пространстве имен, начинающиеся со знака подчеркивания, зарезервированы для реализации. Идентификаторы литеральных суффиксов, не начинающиеся со знака подчеркивания, зарезервированы для будущих версий стандарта.

Неправильно (возможны конфликты с зарезервированными именами):

#ifndef _MY_HEADER_H_
#define _MY_HEADER_H_

// Содержимое my_header.h

#endif

Правильно:

#ifndef MY_HEADER_H
#define MY_HEADER_H

// Содержимое my_header.h

#endif

Неправильно (литеральные суффиксы должны начинаться со знака подчеркивания):

#include <cstddef>
unsigned int operator"" x(const char *, std::size_t);

Правильно:

#include <cstddef>
unsigned int operator"" _x(const char *, std::size_t);

Неправильно (глобальная переменная начинается с подчеркивания):

static std::size_t _limit = 100;

std::size_t get_limit() {
    return _limit;
}

Правильно:

static std::size_t limit = 100;

std::size_t get_limit() {
    return limit;
}

Неправильно (SIZE_MAX определена в стандартной библиотеке как размер типа std::size_t):

#include <cstdint>

enum max_values {
    SIZE_MAX = 100, // конфликт с зарезервированным макросом
    // ...
};

Правильно:

#include <cstdint>

enum max_values {
    BUFF_MAX = 100,
    // ...
};