我有这段代码:
#include <iostream>
template<class T> void* ToPtr(T t) { return ToPtr((void*)t); }
void* ToPtr(void* i) { return i; }
void* ToPtr(int i) { return (void*)(long)(unsigned int)i; }
template<class T> int ToInt(T t) { return ToInt((void*)t); }
int ToInt(void* i) { return (int)(unsigned int)(long)i; }
int ToInt(int i) { return i; }
struct MyClass {
template<class T>
void* Find(T t) { return ToPtr(t); }
template<class T>
int FindInt(T t) { return ToInt(t); }
};
int main() {
MyClass myClass;
int myInt = 1;
std::cout << &myClass << std::endl;
std::cout << myInt << std::endl;
std::cout << myClass.Find(&myClass) << std::endl;
std::cout << myClass.Find(myInt) << std::endl;
std::cout << myClass.FindInt(&myClass) << std::endl;
std::cout << myClass.FindInt(myInt) << std::endl;
}
该程序在第一次调用 Find() 时崩溃,但我不知道为什么。我正在使用 GCC 6.2.0,它仅符合 C++14,否则我会使用 constexpr。我究竟做错了什么?