C++テンプレートテクニック第2版のメタ関数で型を操作する部分の実行結果をmodern effective C++項目4の型情報の表示法を使い
結果表示を行っていますがconstを先につけるか、lrefを先につけるかで
結果が変わります。
コンパイラはMinGW
-std=c++14にてコンパイルしています。
C++
1//表示用クラス 2template <class T> 3class TD; 4 5//constの付与 6template <class T> 7struct m_add_const{ 8 typedef const T type; 9}; 10//lrefの付与 11template <class T> 12struct m_add_lref{ 13 typedef T& type; 14}; 15template <class T> 16struct m_add_lref<T&>{ 17 typedef T& type; 18}; 19//const + lrefの付与 20template <class T> 21struct m_add_const_lref{ 22 typedef typename m_add_lref<typename m_add_const<T>::type>::type type; 23}; 24 25int main(){ 26 m_add_const_lref<int>::type n; 27 TD<decltype(n)> test; 28} 29//表示結果(問題なく表示) 30// aggregate 'TD<const int&> test' has....
C++
1//const + lrefの付与 2//lrefとconstの順番を変更 3template <class T> 4struct m_add_const_lref{ 5 typedef typename m_add_const<typename m_add_lref<T>::type>::type type; 6}; 7//表示結果 8// aggregate 'TD<int&> test' has... 9//constが付与されない
さらにテンプレートに渡す型を参照に変更し
m_add_const_lref<int&>::type n = a;
とするとintを渡した場合でうまくいく方の方法でもint&と表示されconstが付与されません。
原因等思いあたる方いらっしゃいましたら、ご回答をお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/20 07:28
2019/02/20 07:59
2019/02/20 08:34
2019/02/20 08:51