Хорошая читаемость — субъективный критерий. Если не нравится/не подходит стандартное решение и хочется эксплуатировать потокобезопасную инициализацию, то можно это реализовать гораздо проще на современном С++ и без привлечения препроцессора. Например:
При таком подходе можно вообще не задумываться об ограничениях на количество/состав операторов в коде инициализатора или о переопределнии неявных локальных переменных.
Результат:
Foo call
Run me once
Foo call
Foo call
При таком подходе можно вообще не задумываться об ограничениях на количество/состав операторов в коде инициализатора или о переопределнии неявных локальных переменных.