cac*_*cau 5 c++ boost static-assert c++11
C++ 11中是否有任何新的,很酷的功能允许我们在编译时检测现在标记为已弃用的API是否实际上被某人调用?
从我读到的关于新static_assert功能的内容来看,它似乎不够灵活,不能用于那种分析.
但是还有什么我们可以使用的吗?
可选地,是否有任何提升允许这种编译时检查?
使用C++ 14,您将拥有该选项:
#include <iostream>
void foo( int v ) { std::cout << v << " "; }
[[deprecated("foo with float is deprecated")]]
void foo( float v ) { std::cout << v << " "; }
[[deprecated("you should not use counter anymore")]]
int counter {};
int main() {
foo( ++counter );
foo( 3.14f );
}
Run Code Online (Sandbox Code Playgroud)
Clang给出了编译输出(这里):
main.cpp:12:10: warning: 'counter' is deprecated [-Wdeprecated-declarations]
foo( ++counter );
^
main.cpp:9:5: note: 'counter' has been explicitly marked deprecated here
int counter {};
^
main.cpp:13:3: warning: 'foo' is deprecated [-Wdeprecated-declarations]
foo( 3.14f );
^
main.cpp:6:6: note: 'foo' has been explicitly marked deprecated here
void foo( float v ) { std::cout << v << " "; }
^
2 warnings generated.
Run Code Online (Sandbox Code Playgroud)
是否static_assert太不灵活取决于您未指定的要求,但如果您想禁止调用库中已弃用的 API ,并且这些函数是模板,那么它是完美的。
更有可能的是,您希望在进行此类调用时发出某种纯粹的警告,并且据我所知,没有新的 C++11 功能可以做到这一点。
一般来说,C++ 不提供对特定编译器诊断/输出的细粒度控制,仅提供“可以编译”和“不能编译”(尽管这是一个粗略的过度简化,但原则成立)。
相反,您将需要依赖编译器特定的功能,例如__declspec和__attribute__。
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |