7
根據這些定義什麼時候可以在私有成員類型上專門化模板?
template<class T> class foo {};
template<class T> class foo1 { static int i; };
class bar { class baz {}; };
我很驚訝地看到,這個編譯
template<>
class foo<bar::baz> {};
但這種失敗,出現錯誤'class bar::baz' is private
template<>
int foo1<bar::baz>::i = 42;
當發生這種情況,並且有一種解決方法,而不是公開類型?
* *很有趣。我得到這是定義這個類的變量的錯誤。即,'foo {};'是好的(g ++),但是'foo f;'不是。所以它幾乎是一個不可用的類型,看起來錯誤只是相對較晚(即不在類定義)。 –
@AmiTavory這是不可用的,因爲你總是可以添加[公共類型別名](http://coliru.stacked-crooked.com/a/22807544d8414c4e)。有趣的問題,雖然。爲什麼在':: i'的專業化方面有訪問檢查? –
@DanielFrey我的理解是,問題是關於沒有修改'bar'代碼的情況。 –