integral_constant라는 Helper 클래스에 대해 궁금합니다.

dltkddyd의 이미지

integral_constant라는 클래스안에 타입인수로 비타입인수를 캐스팅하는 연산자가 정의돼 있습니다. 이것이 뭘 하는 것인가 궁금해서 Trial이라는 클래스로 동일한 연산자를 정의하였더니, 내부의 값을 캐스팅해서 적절하게 불러오기 위한 기능을 하는 것이던데요. 그런데 이와는 다르게, integral_constant 클래스에서의 타입캐스팅은 내부의 값을 적절하게 불러오지 못합니다. 아래 예시 코드가 있습니다.

template class Trial { public: static const int value=v; operator int() const { return v; } };

int main() {
Trial ttmp;
cout<<"ttmp.value is "<<(int)ttmp<

integral_constant obj3;
cout< cout<<(int)obj3<

return 0;
}

dltkddyd의 이미지

integral_constant라는 클래스안에 타입인수로 비타입인수를 캐스팅하는 연산자가 정의돼 있습니다. 이것이 뭘 하는 것인가 궁금해서 Trial이라는 클래스로 동일한 연산자를 정의하였더니, 내부의 값을 캐스팅해서 적절하게 불러오기 위한 기능을 하는 것이던데요. 그런데 이와는 다르게, integral_constant 클래스에서의 타입캐스팅은 내부의 값을 적절하게 불러오지 못합니다. 아래 예시 코드가 있습니다.

template<class ctarg, ctarg v>
class Trial {
public:
	static const int value=v;
	operator int() const {
		return v;
	}
};
 
int main() {
	Trial<int, 50> ttmp;
	cout<<"ttmp.value is "<<(int)ttmp<<endl;//여기서는 50이라는 값이 적절하게 출력됩니다.
 
	integral_constant<int,75> obj3;
	cout<<obj3.value<<endl;
	cout<<(int)obj3<<endl;//그런데 여기서는 의도대로 캐스팅이 되지 않습니다.  컴파일시 무효한 타입 캐스팅이라는 오류 메시지가 뜹니다.
 
	return 0;
}

integral_constant의 내부 정의는 다음과 같던데요.

template <class T, T v>
struct integral_constant {
  static constexpr T value = v;
  typedef T value_type;
  typedef integral_constant<T,v> type;
  constexpr operator T() { return v; }
};

여기서

constexpr operator T(){return v;}

가 캐스팅을 제대로 하지 못하는 이유는 뭔가요? 그런데 <를 계속 &lt;, >를 &gt;로 출력하네요. <code>~</code>로 감쌌는데도요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.