"Initializer is not a compile time constant" error works in .mm?

objective-c, objective-c++

Solution

As you mentioned, in C and Objective-C static variables can only be initialised with compile-time constants. In C++ (and therefore Objective-C++) on the other hand, static variables are assigned at run time, before `main` runs.

For more details have a look at Eli Bendersky's Non-constant global initialization in C and C++

Problem

I'm puzzled by a situation I'm observing and would love some insight. First, I'm using Xcode 5, with LLVM 5 compiler options set to defaults. I have a line in a .m file such as: ``` static NSArray * const kSchemaVersions = @[@"1"]; ``` And, as expected, I see a compiler error saying `Initializer element is not a compile-time constant.` However, if I place this same line in a `.mm` (Objective C++) file, the compiler does not complain. I completely understand why it shouldn't work, but I'm baffled as to why it appears to. Thoughts?

Original source