鑑於層次:我有專門的模板,如果他們有問題的代碼是在if(假)
struct base {};
struct a : public base {};
struct b : public base {};
我要填寫vector<base*> vecBase
和vector<a*> aVec
使用此項功能:
template <typename T>
void foo(T* bar) {
if (is_base_of_v<decltype(baseVec)::value_type, T>) baseVec.push_back(static_cast<decltype(baseVec)::value_type>(bar));
if (is_base_of_v<decltype(aVec)::value_type, T>) baseVec.push_back(static_cast<decltype(aVec)::value_type>(bar));
}
的問題在於,即使static_cast
永遠不會被執行,除非它是合法的;像這些調用失敗編譯:
int myInt;
b myB;
foo(&myInt);
foo(&myB);
我知道我可以專門foo
。這就是我在這裏必須做的,或者是否有辦法讓編譯器知道違規的static_cast
永遠不會發生?
「靜若」是不是(還)的支持,因此各分公司應該是有效的。 – Jarod42
@ Jarod42我的心跳得快樂......在我們的將來是「靜止的」嗎? –
相關http://stackoverflow.com/questions/13799420/why-there-is-no-static-if-in-c11 – Jarod42