#include <iostream>
template <typename T>
struct ref_exp{
typedef T value_type;
typedef value_type& reference_type;
typedef const reference_type const_reference_type;
ref_exp(value_type data): _data(data){}
const_reference_type data() const {return _data;}
private:
value_type _data;
};
int main(){
ref_exp<int> exp1(2);
std::cout << exp1.data() << std::endl;
return 0;
}
上記のコードはコンパイルされません
ref.cpp: In member function ‘T& ref_exp<T>::data() const [with T = int]’:
ref.cpp:17: instantiated from here
ref.cpp:10: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’
しかし、私がそれを置き換えるconst_reference_type data() const
とconst value_type& data() const
うまくいきます。また、それを置き換えるtypedef const reference_type const_reference_type
とtypedef const value_type& const_reference_type
コンパイルされます