Does somebody know, why this compiles??
template< typename TBufferTypeFront, typename TBufferTypeBack = TBufferTypeFront>
class FrontBackBuffer{
public:
FrontBackBuffer(
const TBufferTypeFront front,
const TBufferTypeBack back): ////const reference assigned to reference???
m_Front(front),
m_Back(back)
{
};
~FrontBackBuffer()
{};
TBufferTypeFront m_Front; ///< The front buffer
TBufferTypeBack m_Back; ///< The back buffer
};
int main(){
int b;
int a;
FrontBackBuffer<int&,int&> buffer(a,b); //
buffer.m_Back = 33;
buffer.m_Front = 55;
}
I compile with GCC 4.4. Why does it even let me compile this? Shouldn’t there be an error that I cannot assign a const reference to a non-const reference?
For the code to do what you want it to do, it would have to read:
which has the added “feature” that it turns other types into const references when used to construct
FrontBackBuffer.Now this isn’t perfect. This prevents temporary arguments to
FrontBackBufferfrom being moved, and passes even small cheap to copy types (likechar) by reference instead of by value. There are standard C++0x techniques to do this that are a bit awkward to write if you care.