पर विचार करें निम्नलिखित मामलेstatic_assert त्रुटि
typedef void (*foo)();
template<foo f>
struct bar {
static_assert(f!=nullptr,"f == null!");
};
void baz() {}
inline void bax() { }
bar<baz> ok;
bar<bax> bad; // error: non-constant condition for static assertion
दोनों baz
और bax
टेम्पलेट तर्क के रूप में स्वीकार कर रहे हैं देता है। यह इंगित करता है कि दोनों को स्थिरांक के रूप में स्वीकार किया जाता है। हालांकि, static_assert
पर वे अलग-अलग प्रतीत होते हैं (कम से कम जीसीसी 4.9 में) - bax
अब स्थिर नहीं है।
मेरे धारणा है कि static_assert
और टेम्पलेट constantness हूबहू का मूल्यांकन किया गया था। ईजी। या तो त्रुटि होना चाहिए
- या
static_assert
गैर निरंतर हालत त्रुटि उठाना नहीं करना चाहिए 'bax कोई मान्य टेम्पलेट तर्क नहीं है'।
Am मैं गलत?
जब तक 'foo' कहीं घोषित किया जाता है, मैं इस सब पर संकलन नहीं होगा ... –
तय की उम्मीद, typedef शून्य (* foo) को खो दिया(); जोड़ा – hutorny
वीसी ++ 14.0 दोनों स्वीकार करता है। – Fireho