以下代码在gcc 14(link)和clang 17(link)中编译失败,但在MSVC 17.6.2中成功。gcc和clang抛出了大量对我来说没有意义的错误。错误消息太长,无法在此发布。详情请参阅相关链接。有人能帮我弄明白这是怎么回事吗?格式库在gcc和clang中是相当新的。这可能是库实现的bug吗?
#include <format>
#include <iostream>
enum struct enum_t: unsigned {
cat,
dog
};
template <>
struct std::formatter<enum_t>: formatter<unsigned> {
auto format(enum_t v, format_context& ctx) {
return formatter<unsigned>::format(unsigned(v), ctx);
}
};
int main() {
std::cout << std::format("{}", enum_t::cat) << '\n';
}
1条答案
按热度按时间wnavrhmk1#
关于libstdc++产生的错误:
根据BasicFormatter requirements,必须可以在格式化程序专门化类型的
const
限定对象上调用format
。您的
format
成员函数不是const
限定的,因此它不能在这样的调用中使用(并且它还对基类隐藏了format
)。你需要
const
-限定成员函数:这个要求在C20中没有,但在当前的C23草案中通过LWG 3636的解决方案。我认为它是一个缺陷报告,所以如果你用
-std=c++20
编译,它也应该适用。我还不知道Clang with libc++的代码有什么问题。我会调查。。