Re: References to references
[Please do not mail me a copy of your followup]
Kelvin Chung <kelvSYC@mac.com> spake the secret code
<2011122621495936780-kelvSYC@maccom> thusly:
I'm getting an unforseen problem when I'm trying to compile code for
older compilers. The following code compiles in clang 3.0 on a Mac:
template <class Key>
struct Foo {
typedef Key& key_type;
virtual Bar mapKey(const key_type& key) = 0;
};
However, when I compile with gcc 4.1.2 on SUSE Linux, I get "cannot
declare reference to 'Key&', specifically wrt to mapKey().
I'm trying to find the root cause of this: Is it a C++11-specifc thing,
and thus barfing on gcc 4.1.2, which IIRC has no C++11 support? Is it
simply that I am expecting that "const key_type&" resolves to "Key&"
(ie. the references "collapse"), when it shouldn't? What should be the
workaround for getting this snippet to compile under gcc 4.1.2?
You can't take a reference of a reference; this is not C++11 specific,
it has always been this way.
Look at Boost.TypeTraits for a way to identify if a type has a
reference and add one if it doesn't.
<http://www.boost.org/doc/libs/1_48_0/libs/type_traits/doc/html/index.html>
--
"The Direct3D Graphics Pipeline" -- DirectX 9 version available for download
<http://legalizeadulthood.wordpress.com/the-direct3d-graphics-pipeline/>
Legalize Adulthood! <http://legalizeadulthood.wordpress.com>
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]