$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [Multiarray] & [Range] MSVC/gcc warning: returning address of local variable or temporary
From: John Reid (j.reid_at_[hidden])
Date: 2008-11-11 18:53:27
The following code generates a worrying warning under MSVC:
#include <boost/range/iterator_range.hpp>
#include <boost/multi_array.hpp>
typedef boost::multi_array< double, 1 > my_array;
typedef my_array::const_iterator it;
void test(const my_array & a) {
        boost::iterator_range< it > it_range(a.begin(), a.begin() + 1);
        it_range[0];
}
C:\Dev\ThirdParty\boost\boost_1_37_0\boost/range/iterator_range.hpp(356) 
: warning C4172: returning address of local variable or temporary
 
C:\Dev\ThirdParty\boost\boost_1_37_0\boost/range/iterator_range.hpp(354) 
: while compiling class template member function 'const double 
&boost::iterator_range<IteratorT>::operator [](__w64 int) const'
         with
         [
             IteratorT=it
         ]
         iterator_range.cpp(8) : see reference to class template 
instantiation 'boost::iterator_range<IteratorT>' being compiled
         with
         [
             IteratorT=it
         ]
I'm using msvc 8.0 express and boost 1.37.0 release. I've seen similar 
warnings from gcc 4.3 on similar code. Is this a problem with 
boost.Multiarray, boost.range or the compiler? My guess is that 
Multiarray has defined its iterators incorrectly. Can anyone confirm 
this/provide a fix?
Thanks,
John.