我試圖對模板參數進行靜態斷言,以檢查/強制Type
複製可構造。然而,靜態斷言失敗。我不明白爲什麼,也找不到任何文件,爲什麼它會在靜態評估中失敗。爲什麼模板參數上的is_copy_constructible靜態斷言失敗?
實例化的類是複製可構造的,但它使用了我認爲稱爲好奇地重現的模板參數模式。
下面是整個測試代碼:不出所料
結果:
10
test
1
這意味着通過了第2個斷言。所以看起來Fun
不是內的CopyConstructible。然而,is_copyable
說這是。
我也嘗試更改is_copyable()
方法使用bool
在課堂上初始化它使第二個斷言失敗。當阻止斷言被刪除時,值爲copyable
被設置爲0;
似乎只有評估失敗是基類內的靜態copmile-time。
Q1爲什麼編譯時檢查false
和「運行時」true
?它是否因爲類(Fun
)未在檢查時完全實例化/定義而失敗?
Q2這是預期嗎? (is_copy_constructible的靜態評估結果比不同的「運行時間」評估結果)。
Q3有沒有辦法編譯時斷言,檢查類是CopyConstructible這樣的設計?
測試在叮噹3.2-11,gcc 4.8.2和ideone默認的C++ 11編譯器。
你可以製作一個較短的測試用例並只詢問一個問題嗎? –
@KerrekSB我認爲問題1和問題2是高度相關的,我可以放棄第3個問題,因爲它會問及解決問題的方法。很難將其縮短並展示每一種行爲。你有什麼建議嗎? (我不確定是否需要operator =,因此可能會將其刪除。) – luk32