template<typename T>

struct Point

{

Point(T x_, T y_)

:

x(x_),

y(y_)

{

};


T x;

T y;

};



template<typename T, template<typename E> class C = Point,

typename = typename std::enable_if<

std::is_arithmetic<T>::value ||

std::is_same<std::decay_t<C<T>>, Point<T>>::value>::type>

auto CalcDist(C<T>&& pt1, C<T>&& pt2)

{


return std::sqrt(

((pt1.x - pt2.x) * (pt1.x - pt2.x)) +

((pt1.y - pt2.y) * (pt1.y - pt2.y)));

}



int main()

{

Point<float> pt1(2, 4);

Point<float> pt2(5, 5);


auto res_pt = CalcDist(pt1, pt2);



return 0;

}


위에 있는 CalcDist 함수는 두 점 사이의 거리를 구하는 함수야

일단 enable_if로 산술 형식 타입인 Point struct만 받도록 조건을 걸어 놨어

문제는 저 함수 파라미터가 rvalue로만 받아지더라... 함수 파라미터를 rvalue lvalue 둘 다 받는 퍼펙트 포워딩으로 동작하게 만들고 싶은데 저 함수를 어케 수정해야 하냐?

내 빡대가리로는 도저히 저거 건들지 못하겠네 ㅠㅠ

좀 도와줘...