Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 216
levigroker Avatar asked Mar 24 '23 00:03

levigroker


1 Answers

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++

like image 190
Sebastian Avatar answered Apr 01 '23 20:04

Sebastian