C++ &引用;不赞成;太阳和#x27的符号;s C++;编译程序?

C++ &引用;不赞成;太阳和#x27的符号;s C++;编译程序?,c++,deprecated,suncc,C++,Deprecated,Suncc,Sun编译器是否有标记将函数标记为不推荐使用的函数,如GCC的\uuuuu属性((不推荐))或MSVC的\uuu declspec(不推荐)?这将在Sun上显示带有“+w”标志的编译器警告,或在GCC上显示带有“-Wall”标志的编译器警告。不幸的是,它破坏了函数的ABI兼容性;我还没有找到解决这个问题的办法 #define DEPRECATED char=function_is_deprecated() inline char function_is_deprecated() { r

Sun编译器是否有标记将函数标记为不推荐使用的函数,如GCC的
\uuuuu属性((不推荐))
或MSVC的
\uuu declspec(不推荐)

这将在Sun上显示带有“+w”标志的编译器警告,或在GCC上显示带有“-Wall”标志的编译器警告。不幸的是,它破坏了函数的ABI兼容性;我还没有找到解决这个问题的办法

#define DEPRECATED char=function_is_deprecated()

inline char function_is_deprecated()
{
    return 65535;
}

void foo(int x, DEPRECATED)
{
}

int main()
{
    foo(3);
    return 0;
}
输出:

CC -o test test.cpp +w
"test.cpp", line 7: Warning: Conversion of "int" value to "char" causes truncation.
"test.cpp", line 15:     Where: While instantiating "function_is_deprecated()".
"test.cpp", line 15:     Where: Instantiated from non-template code.
1 Warning(s) detected.

使用它的方式是,当您要声明一个已弃用的函数时,在其参数列表的末尾添加一个逗号,然后写入弃用的。它的工作方式是添加一个导致转换警告的默认参数(从而保留API)。

似乎可以在任何支持
\warning
的编译器上工作的解决方案是:

  • 将有问题的标题复制到新的升级标题名
  • 从升级的头文件中删除不推荐使用的函数
  • 添加到旧头文件:
    #警告“此头已弃用。请使用{new header name}”

似乎模板参数在某个地方丢失了。我对模板参数何时进行求值的想法是错误的,所以我放弃了它。