防止 fmt 打印函数指针

NoS*_*tAl 7 c++ c++20 fmt

我有一个以下有缺陷的程序。逻辑是无稽之谈,这只是一个玩具例子。

#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>);
} 
Run Code Online (Sandbox Code Playgroud)

输出是

float 大小为 4 个字节:true
double 大小为 4 个字节:true

问题是我传递了一个函数指针fmt::format并将其作为布尔值打印出来。修复很简单,只需调用该函数即可,但我想知道是否有一种方法可以捕获这样的错误。

由于函数返回,bool它作为输出实际上看起来很合理。

vit*_*aut 9

这是由于指针检测逻辑未捕获函数指针而导致的错误。我打开了一个 GitHub 问题:https ://github.com/fmtlib/fmt/issues/2609 。

更新:问题已修复。