c++c++17inline-variable

Inline std::mutex in header file


I am using a global std::mutex in different cpp files.

Is it okay to declare it in a header file as inline?

inline std::mutex mtx;

Is mtx constructed this way?

Should it be initialized explicitly? As in:

inline std::mutex mtx = {};

Solution

  • In the documentation on inline keyword applied to a variable (C++17) (https://en.cppreference.com/w/cpp/language/inline) it is stated that

    2) It has the same address in every translation unit.
    

    and

    If an inline function or variable (since C++17) with external linkage is defined differently in different translation units, the behavior is undefined. 
    

    I understand from these sentences that the mutex will actually be unique and correctly initialised (if the only header suggested is used)