防止 fmt 打印函数指针。

7

我有一个有bug的程序。逻辑是无意义的,只是一个玩具示例。

#include <ranges>
#include <iostream>
#include <fmt/format.h>
#include <fmt/ranges.h>

template<typename T>
constexpr bool size_is_4(){
    return sizeof(T)==4;
}

int main() {
    std::cout << fmt::format("float size is 4 bytes  : {}\n", size_is_4<float>);
    std::cout << fmt::format("double size is 4 bytes : {}\n", size_is_4<double>);
} 

输出结果为

浮点数大小为4字节:正确
双精度大小为4字节:错误

问题在于我将函数指针传递给了fmt::format,它将其打印为布尔值。修复很容易,只需调用该函数,但我想知道是否有一种方法可以捕获这类错误。

由于函数返回bool,因此实际上作为输出看起来是合理的。

1个回答

9

这是一个由于函数指针未被指针检测逻辑捕获而引起的错误。我已经在GitHub上开了一个问题:https://github.com/fmtlib/fmt/issues/2609

更新:该问题已经得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接