Attached a short program and a longer compilation output.
If I understand it correctly then the type

    map<string, string&>

is not acceptable. 

But why? The compilation output mentions `reference to reference'. Can 
you elaborate on this or do these 3 words say it all? Is this up to me 
or is it something that is done internally by the STL?
In particular, in what circumstances will references to other classes 
instead of string& be accepted?

Compiler version is 3.03:

$ g++-3.0 -v
Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,p
roto,objc --prefix=/usr --infodir=/share/info --mandir=/share/man 
--enable-shared --with-gnu-as --with-gnu-ld --with-system-zlib 
--enable-long-long --enable-nls --without-included-gettext 
--disable-checking --enable-threads=posix --enable-java-gc=boehm 
--with-cpp-install-dir=bin --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.0.3
$

$ cat -n main.cc
     1  /*
     2   * main.cc.
     3   */
     4  
     5  
     6  #include <iostream>
     7  #include <map>
     8  #include <stdexcept>
     9  #include <string>
    10  
    11  using namespace std;
    12  
    13  int main(void)
    14  try {
    15      map<string, string> map1;
    16      map<const string, const string> map2;
    17      map<string, string&> map3;
    18      map<const string, const string&> map4;
    19      return 0;
    20  }
    21  catch(const exception &excp) {
    22      cerr << excp.what() << '\n';
    23      throw;
    24  }


$ g++-3.0 -Wall main.cc
/usr/include/g++-v3/bits/stl_map.h: In instantiation of 
`std::map<std::string, std::string&, std::less<std::string>, 
std::allocator<std::pair<const std::string, std::string&> > >':
main.cc:17:   instantiated from here
/usr/include/g++-v3/bits/stl_map.h:155: forming reference to reference 
type
   `std::string&'
/usr/include/g++-v3/bits/stl_pair.h: In instantiation of 
`std::pair<const std::string, std::string&>':
/usr/include/g++-v3/bits/stl_tree.h:123:   instantiated from 
`std::_Rb_tree_node<std::pair<const std::string, std::string&> >'
/usr/include/g++-v3/bits/stl_tree.h:670:   instantiated from `void 
std::_Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc>
::_M_empty_initialize() [with _Key = std::string, _Value = 
std::pair<const std::string, std::string&>, _KeyOfValue = 
std::_Select1st<std::pair<const std::string, std::string&> >, _Compare 
= std::less<std::string>, _Alloc = std::allocator<std::pair<const 
std::string, std::string&> >]'
/usr/include/g++-v3/bits/stl_tree.h:648:   instantiated from 
`std::_Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc>
::_Rb_tree(const _Compare&, typename std::_Rb_tree_base<_Value, _Alloc>
::allocator_type&) [with _Key = std::string, _Value = std::pair<const 
std::string, std::string&>, _KeyOfValue = std::_Select1st<std::pair<cons
t std::string, std::string&> >, _Compare = std::less<std::string>, 
_Alloc = std::allocator<std::pair<const std::string, std::string&> >]'
/usr/include/g++-v3/bits/stl_map.h:115:   instantiated from 
`std::map<_Key, _Tp, _Compare, _Alloc>::map() [with _Key = std::string, 
_Tp = std::string&, _Compare = std::less<std::string>, _Alloc = 
std::allocator<std::pair<const std::string, std::string&> >]'
main.cc:17:   instantiated from here
/usr/include/g++-v3/bits/stl_pair.h:84: forming reference to reference 
type
   `std::string& const'

-- 

    Shaul Karl
    email: shaulka(at-no-spam)bezeqint.net 
           Please substitute (at-no-spam) with an at - @ - character.
           (at-no-spam) is meant for unsolicitate mail senders only.



=================================================================
To unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]

Reply via email to