[Insight-developers] MedialNodeCorrespondencesTest, Intel C++ fixed

Aaron Cois cacst11+ at pitt . edu
Thu, 14 Aug 2003 16:33:24 -0400


The fix inplemented for itkEllipsoidInteriorExteriorSpatialFunction 
causes errors in VS .NET.  The errors are odd, and are remeniscent of 
arbitrary errors that would pop up from a missing brace of bracket, but 
I have found no such problem in the code.  Can someone else with .NET 
verify?  Just try to run anything that uses the class...the 
itkMedialNodeCorrespondenceTest should produce the errors.  The errors 
are listed below

    -Aaron Cois

f:\Projects\Insight\Code\Common\itkEllipsoidInteriorExteriorSpatialFunction.txx(112): 
error C2244: 
'itk::EllipsoidInteriorExteriorSpatialFunction<,TInput>::SetOrientations' 
: unable to match function definition to an existing declaration

f:\Projects\Insight\Code\Common\itkEllipsoidInteriorExteriorSpatialFunction.txx(114): 
error C2954: template definitions cannot nest


Miller, James V (Research) wrote:

>This was on the Intel C++ compiler on Linux, version 7.
>
>
>  
>
>>-----Original Message-----
>>From: Bill Hoffman [mailto:bill . hoffman at kitware . com]
>>Sent: Thursday, August 14, 2003 1:59 PM
>>To: Miller, James V (Research); Insight-developers (E-mail)
>>Subject: Re: [Insight-developers] MedialNodeCorrespondencesTest, Intel
>>C++ fixed
>>
>>
>>This change was made so that the fixed versions did not have 
>>the overhead
>>of having the extra data associated with the non-fixed 
>>versions.  (8 bytes)
>>
>>
>> From what I can tell, you are saying that the following crashes:
>>
>>
>>#include <vnl/vnl_matrix.h>
>>#include <vnl/vnl_matrix_fixed.h>
>>void foo(vnl_matrix<double> m)
>>{
>>  vnl_matrix<double> mm = m;
>>}
>>
>>main()
>>{
>>  vnl_matrix_fixed<double,3,3> m;
>>  foo(m);
>>  return 0;
>>}
>>
>>Which intel compiler is this?  Windows or Linux?
>>
>>It is using this operator:
>>
>>  //: Cheap conversion to vnl_matrix_ref
>>  // Sometimes, such as with templated functions, the compiler cannot
>>  // use this user-defined conversion. For those cases, use the
>>  // explicit as_ref() method instead.
>>  operator const vnl_matrix_ref<T>() const { return 
>>vnl_matrix_ref<T>( num_rows, num_cols, 
>>const_cast<T*>(data_block()) ); }
>>
>>Sounds like a bug in the compiler.   This is going to be hard 
>>to track down in all the
>>code, and should work.  
>>
>>If you let me know which intel compiler it is crashing on, I 
>>can take a look.
>>
>>-Bill
>>
>>
>>    
>>
>>>It looks like the vnl_matrix_fixed and vnl_matrix classes 
>>>      
>>>
>>are no longer related via inheritence.  Instead, there are 
>>some converter routines ( mat_fixed.as_ref() returns a vnl_matrix).  
>>    
>>
>>>The Intel compiler builds were crashing on the deallocation 
>>>      
>>>
>>of a vnl_matrix.  Bill changed the code in 
>>Ellipsoid*SpatialFunction to take a reference to a 
>>vnl_matrix_fixed instead of taking a vnl_matrix by value.  
>>This clears up the problem on the Intel compiler.  I am 
>>guessing the other systems are relying on some other type 
>>conversion operators that may be flawed on the Intel compiler.
>>    
>>
>>>Two things to look out for:
>>>
>>>1. vnl_matrix and vnl_matrix_fixed mismatches.
>>>2. function that take matrix types by value as opposed to by 
>>>      
>>>
>>reference. 
>>    
>>
>>
>>    
>>
>_______________________________________________
>Insight-developers mailing list
>Insight-developers at itk . org
>http://www . itk . org/mailman/listinfo/insight-developers
>  
>