Compilation error in itkGeometricalQuadEdge.hxx

ITK 4.3을 컴파일하다보니까 여기서 에러가 난다. mailing list를 뒤져보니 똑같은 문제로 고민하는 사람이 있었다. 그러나 1년이 지난 지금에도 해결책은 올라오지 않았고, 어쩔수 없이 직접 workaround를 찾을 수 밖에 없었다.

처음에는

/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: initializer invalid for static member with constructor

/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: (an out of class initialization is required)

/usr/local/itk/InsightToolkit-4.0.0/Modules/Core/QuadEdgeMesh/include/itkGeometricalQuadEdge.hxx:32:1: error: ‘itk::GeometricalQuadEdge::m_NoPoint’ cannot be initialized by a non-constant expression when being declared

이게 뭔소리야 하고 고민했었는데, 코드를 살펴보니 이유를 알 수 있었다.

itkGeometricalQuadEdge.hxx의 33번째 혹은 34번째 줄을 살펴보면

m_NoPoint = vcl_numeric_limits<OriginRefType>::max()

라는 부분이 나온다. 그런데 이 max()라는 것이 사실은 runtime시에 실행이 되므로 const expression이 아닌 것이다. c++11에서 사용하는 constexpr만 있어도 쉽게 해결이 될 것 같은데, 궁여지책으로 다음과 같이 boost::integer_traits를 사용하면 일단 무리없이 컴파일 할 수 있다.

m_NoPoint = boost::integer_traits<OriginRefType>::const_max 

Workaround for Compilation error in itkGeometricalQuadEdge.hxx

Change

vcl_numeric_limits<OriginRefType>::max() 

to

boost::integer_traits<OriginRefType>::const_max 

around line 33~34 in itkGeometricalQuadEdge.hxx.

Ps. I tried to post my workaround to Insight-users mailing list, but my message is rejected (why?) -_-

댓글