Код: Выделить всё
// foo.hpp
#pragma once
#include
#include
static const inline std::string FOOBAR_DIR = "/foobar_"
+ std::to_string(std::chrono::system_clock::now().time_since_epoch().count()) + "/";
В моих тестах Catch2 у меня есть прослушиватель событий, который использует FOOBAR_DIR:
Код: Выделить всё
#include
#include
#include
#include "foo.hpp"
class SomeEventListener: public Catch::EventListenerBase
{
public:
using Catch::EventListenerBase::EventListenerBase;
void testRunStarting(const Catch::TestRunInfo&) override
{
std::filesystem::create_directories(FOOBAR_DIR);
}
void testRunEnded(const Catch::TestRunStats&) override
{
std::filesystem::remove_all(FOOBAR_DIR);
}
};
CATCH_REGISTER_LISTENER(SomeEventListener)
Код: Выделить всё
#include
#include "foo.hpp"
TEST_CASE("some test case", "[some-tag]")
{
// Do something with FOOBAR_DIR
}
Что-то я делаю неправильно, что приводит к такому поведению? Должны ли статические встроенные переменные инициироваться несколько раз, если к ним обращаются в нескольких исходных файлах?
Я использую GCC 14 в Linux AMD64
Подробнее здесь: https://stackoverflow.com/questions/798 ... -than-once
Мобильная версия