类型别名允许分配任意指针,尽管期望int*

mid*_*dor 5 c++ template-meta-programming variadic-templates c++11

我今天遇到了一个有趣的问题,涉及从非匹配类型的函数指针赋值指向.

编辑:受@Frank启发的简短示例:

void printSquare(int x) { printf("%d\n", x * x); }

int* foo() {
  using res_t = int*;

  return res_t(printSquare);
}
Run Code Online (Sandbox Code Playgroud)

我希望代码不会编译,因为函数的返回类型应该是int*,它绝不能从类型系统边界内的函数引用或-pointer创建(就我而言)意识到).当直接返回或res_tint *编译器代替时拒绝这个程序,但是using在它之间使用-declaration,它会编译并运行(当然,指向的位置不包含int,而是一个函数).

原始代码和问题保存在下面的单独答案中.