Clang, проблема компиляции {fmt}C++

Программы на C++. Форум разработчиков
Anonymous
Clang, проблема компиляции {fmt}

Сообщение Anonymous »

Я только что обновил нашу кодовую базу до использования fmt 10 и столкнулся со странной проблемой.
{fmt} представляет format_as как простой способ добавления пользовательских средства форматирования для ваших собственных перечислений/классов, а также вводит форматирование std::optional.
Однако комбинация этих двух не может скомпилироваться с использованием clang, но компилируется нормально с использованием gcc или msvc.
Пример можно найти здесь: godbolt. Измените компилятор на gcc, и код компилируется нормально.

Код: Выделить всё

#include 
#include 
#include 

namespace nn
{

enum class Bar
{
First,
Second,
Third,
Fifth = 5,
};

std::string_view format_as(Bar bar)
{
switch (bar) {
case Bar::First:
return "One";
case Bar::Second:
return "Two";
case Bar::Third:
return "Three";
case Bar::Fifth:
return "Five";
}
return "";
}
}

int main() {
auto b = nn::Bar::First;
std::optional ob = b;

fmt::print("{} {}\n", b, ob);

return 0;
}
Похоже, проблема в том, что "fmt/std.h" вызывает u.set_debug_format(set); в строке 170, а set_debug_format является закрытым из-за частное наследование в строке 4055 fmt/format.h. Если я добавлю using base::set_debug_format; в строке 4058, код компилируется также на clang.
Есть ли у кого-нибудь еще наткнулся на эту проблему? Это ошибка в fmt, или проблема с компилятором clang, или я просто делаю что-то не так?

Подробнее здесь: https://stackoverflow.com/questions/774 ... tion-issue

Вернуться в «C++»