Comment

Comment by bb88

No no no no no. This is a C++ problem. As much as you want to blame this particular problem on C, C handles this the right way.

Let's try to write the equivalent of this error in C:

  int myfunc() {
          return 5;
  }
  
  static int x;
  static int y = 4;
  static int z = myfunc();

  int main()
        {};
Compiling that in gcc gives me:

  main.c:8:16: error: initializer element is not constant
   static int z = myfunc();
                  ^~~~~~
And it makes sense, C just wants to do a memcpy() to initialize the static variables. In C++, the only way the class is initialized is if the ctor is run. And that means running the ctor before main().

Edited to add:

You're correct that 5.1.2 does not specify memcpy() as a form of initialization. But see my reply below about C11 and static storage classes.

parent bb88 8 years ago

Discussion

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton