У меня есть следующая функция C ++:
using namespace std;
template<typename ... Args>
string string_format( const std::string& format, Args ... args )
{
size_t size = snprintf( nullptr, 0, format.c_str(), args ...) + 1;
std::unique_ptr<char[]> buf( new char[ size ] );
snprintf( buf.get(), size, format.c_str(), args ... );
return string( buf.get(), buf.get() + size - 1 );
}
Я могу скомпилировать его в среде Windows. Если я попробую на MacOS, используя gcc
, я получу следующую ошибку:
не может передать объект нетривиального типа 'std :: __ 1 :: basic_string'
через вариадическую функцию; вызов будет прерван во время выполнения
[-Wnon-стручок-переменные аргументы]
gcc настроен следующим образом (gcc --version
):
Настраивается с помощью
--prefix = / Приложения / Xcode.app / Содержание / Разработчик / usr
--with-gxx-include-dir = / usr / include / c ++ / 4.2.1
версия Apple LLVM:
10.0.0 (clang-1000.11.45.5)
Цель: x86_64-apple-darwin18.2.0
Модель резьбы posix
InstalledDir:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Я думаю, что для gcc должны быть некоторые параметры, чтобы избежать проверки типа POD, о которой я не знаю.
Кто-то еще сталкивался с той же проблемой?
UPDATE
Пример кода, вызывающего функцию string_format
:
class Node
{
public:
int id;
int reference;
int value;
std::string label;
std::string describe()
{
return string_format("%s %ld %ld %ld", label, id, reference, value);
}
}