Can an inline variable be changed after initialization in C++17?

344 views Asked by At

My scenario is the following (it worked in clang but not in gcc)

liba.hpp:

inline int MY_GLOBAL = 0;

libother.cpp: (dll)

#include "myliba.hpp"

void myFunc() {
    //
    MYGLOBAL = 28;
}

someexe.cpp:

RunAppThatUsesBothLibAandLibOther();

The problem is that the inline variable was showing 0 in places where I expected 28 because it was alrady modified at run-time. MSVC disagrees with this, but clang does the thing I would expect.

The question is: can inline variables be modified at run-time in my scenario? (I solved the problem by de-inlining the variable.)

1

There are 1 answers

3
Anthony Williams On BEST ANSWER

Yes, inline variables can be modified after initialization.

However, DLLs are strange things on Windows with MSVC. To a close approximation, each DLL is modelled as its own C++ program, with an entirely independent runtime. Therefore, there is one copy of your inline variable for the main program, and another for the DLL.