Является ли статическая функция С++ потокобезопасной?
Сделайте фабричную функцию проверяющую существование файла и создающее его если надо и затем:static inline Settings& applicationSettings()
{
    static Settings set = getSettings(settingsFilePath);
    return set;
}Cтандарт C++11 гарантирует, что getSettings будет вызвана только один раз вне зависимости от количества потоков дёргающих applicationSettings. Главное не забывайте что getSettings не потокобезопасна и не дёргайте её напрямую.
С чего бы этому вызову быть потокобезопасным, если у вас в функции статические переменные?Выполняется ли проверка File()::exists(settingsFilePath) при каждом обращении к функции
А почему она не должна выполняться?
Кстати, а зачем вам две разные статические переменные set?