我知道模板不能出现在extern "C"
块内,其原因是实例化模板函数的名称不能使用未修改的名称出现一次。
但是,在下面的代码中,函数的名称被破坏了(所以应该没有问题,因为每个实例都有一个唯一的名称)但仍然具有与 C 语言链接的函数类型。我的问题是下面的代码是否格式正确:
extern "C" using fn_type = void();
template<typename T>
fn_type foo;
int main()
{
fn_type* const p = foo<int>;
p();
}
编辑:仅通过编译器运行它很难测试这是否符合要求,因为 GCC、Clang 和 MSVC 不区分 C++ 和 C 函数指针类型。