C++ 使用_Generic定义宏不允许使用typename

C++ 使用_Generic定义宏不允许使用typename,c++,visual-c++,typename,visual-studio-macros,C++,Visual C++,Typename,Visual Studio Macros,我正在尝试定义一个通用宏,我打算在调试代码时使用该宏进行异常处理。当我试图编译下面的代码时,它说typename不允许。 说到宏,我是个傻瓜,非常感谢您的帮助 #define ASSERTEXCP(x) _Generic((x),\ char *: printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x ); char strMsg[2014] = {'\0'}; \ sprintf(strMs

我正在尝试定义一个通用宏,我打算在调试代码时使用该宏进行异常处理。当我试图编译下面的代码时,它说
typename不允许。
说到宏,我是个傻瓜,非常感谢您的帮助


#define ASSERTEXCP(x) _Generic((x),\
char *: printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x );
char strMsg[2014] = {'\0'}; \
sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
OutputDebugString(strMsg););


#endif

<代码>泛型< /C> >是C++重载的C方法。C++方法是使用<代码>如果是CONExPRPR <代码>或重载函数:

    #include <type_traits>

    #define ASSERTEXCP(x) if constexpr (std::is_same<decltype(x), char *>::value) {  \
    printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x ); \
    char strMsg[2014] = {'\0'}; \
    sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
    OutputDebugString(strMsg); } 
#包括
#如果constexpr(std::is_same::value){\
printf(“断言错误行%d,文件(%s):->%s\n”,\uuuuuuuuuuuuuuuuuuux)\
char strMsg[2014]={'\0'}\
sprintf(strMsg,“\n插入错误行%d,文件(%s):->%s\n,\uuuuu行,\uuuu文件,x)\
OutputDebugString(strMsg);}

<代码>泛型< /C> >是C(C11),不是C++。不同的语言也在C++中工作。@ QasimShafi,在那个页面中,它也说它在C++上工作吗?试试这个。在C++ 11和14中工作很好,我知道,泛型是C,而对于当前的例子,我不能用C++来使用它,有什么关于我如何才能达到我所要达到的目的的建议?