9.28 Read/write constants

A linkage specification for external constants indicates that a constant can be dynamically initialized or have mutable members.

Note

The use of "C++:read/write" linkage is only necessary for code compiled with --apcs /rwpi. If you recompile existing code with this option, you must change the linkage specification for external constants that are dynamically initialized or have mutable members.

Compiling C++ with the --apcs /rwpi option deviates from the ISO C++ Standard. The declarations in this example assume that x is in a read-only segment:

extern const T x;
extern "C++" const T x;
extern "C" const T x;

Dynamic initialization of x including user-defined constructors is not possible for constants and T cannot contain mutable members. The new linkage specification in this example declares that x is in a read/write segment even if it is initialized with a constant. Dynamic initialization of x is permitted and T can contain mutable members. The definitions of x, y, and z in another file must have the same linkage specifications.

extern const int z;                   // in read-only segment, cannot
                                      // be dynamically initialized
extern "C++:read/write" const int y;  // in read/write segment
                                      // can be dynamically 
                                      // initialized 
extern "C++:read/write"
{
    const int i=5;                    // placed in read-only segment,
                                      // not extern because implicitly
                                      // static 
    extern const T x=6;               // placed in read/write segment
    struct S
    {
        static const T T x;           // placed in read/write segment
    };
}

Constant objects must not be redeclared with another linkage. The code in the following example produces a compile error.

extern "C++"  const T x;
extern "C++:read/write"  const T x; /* error */

Note

Because C does not have the linkage specifications, you cannot use a const object declared in C++ as extern "C++:read/write" from C.

Related reference
8.6 --apcs=qualifier...qualifier
Non-Confidential PDF file icon PDF version ARM DUI0472J
Copyright © 2010-2013 ARM. All rights reserved.