LINUX.ORG.RU

std::call_once() барахлит или я туплю?

 ,


0

1

Привет, что здесь не так?

#include <mutex>
#include <filesystem>
#include <iostream>
using namespace std;


void set_path(std::filesystem::path &path)
{
	cerr << "tick2" << endl;	
}

inline const std::filesystem::path &get_xdg_data_path()
{
	static std::once_flag flag;
	static std::filesystem::path path;
	cerr << "tick1" << std::endl;	
	set_path(path);
	//std::call_once(flag, set_path, path);
	return path;
}

int main()
{
	auto p = get_xdg_data_path();
	std::cout << p << std::endl;
}

В общем, если вызвать set_path(path), то ок, если std::call_once(flag, set_path, path), то

pavlick /tmp $ ./a.out
tick1
terminate called after throwing an instance of 'std::system_error'
  what():  Unknown error -1

call_once 11 стандарта, да и filesystem уже не девочка … . clang аналогично, правда там ведь у них своя стд либа есть -lc++, но хз, что-то у меня ее нет, в репах тоже.

ЗЫ: со стрингом все ок было (через call_oncce)

★★

Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Спасибо, да, это помогает. Что же оно компилируется буд-то все нормально, а потом валистся. Да, я -pthread в любом случае воткнул бы в рабочем коде, а в этом тесте про*бся час.

pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.