tôi có mã tiếp theo:Tại sao g ++ không phát ra cảnh báo noexcept liên quan đến hàm dựng này khi bật `-fpic`?
#include <exception>
#include <cstdlib>
void g() { throw 1; }
void (*p)() = g;
template <class T>
void f(T) noexcept (noexcept (T())) // warning 1
{
p();
}
struct A { A() { } }; // warning 2
int main()
{
try { f(A()); } catch (int) { }
return 1;
}
Và với tùy chọn tiếp theo:
-fno-pic -fmessage-length=0 -std=c++0x -Wnoexcept
g ++ ném cảnh báo tiếp theo:
noexcept03.C:16:6: warning: noexcept-expression evaluates to 'false' because of a call to 'A::A()' [-Wnoexcept]
noexcept03.C:21:12: warning: but 'A::A()' does not throw; perhaps it should be declared 'noexcept' [-Wnoexcept]
Nhưng tại sao khi tôi sử dụng -fpic
thay vì -fno-pic
g++
không ném bất kỳ cảnh báo nào?
EDIT:
GCC phiên bản - 4.7.2
Bạn đang sử dụng phiên bản gcc nào để biên dịch? –
@kumar_m_kiran 4.7.2 – Arseniy