我有一些C++11代码,由于已经重新定义了一个具有相同参数类型的重载函数,因此无法编译:
char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }
有没有编译器宏可以检查这两个基元之间的相等性,然后在编译之前删除第二个(如果它是等效的)?
还有其他返回不同类型字符指针的函数。例如,添加以下内容不会引起任何问题,即使signed
和unsigned long long int
使用相同数量的字节:
char const* foo(long long int) { return "%lld"; }
因此,仅检查类型使用了多少内存似乎是不够的。还有其他方法吗?