I don't understand why the error location is given as the macro definition, rather than where the non-static data member initializer is actually used. The fact the initializer happens to be a macro shouldn't matter, the warnng should indicate where the initializer is used.