Search code examples
c++gccg++skip

C++ skipping line of code?


Background

I am writing a multi-threaded, websocket server in C++.

Problem

When I try to integrate my HTTP parser, MKFAHTTPRequest Request( std::string( Buffer ) ); gets completely skipped during execution.

I've cleaned the project and added -Wall and -Werror (which should tell me that Request is an unused variable, but it doesn't).

void operator()(){
    while( true ){
        if( m_Socket->is_open() ){
            char Buffer[1024]; 

            boost::system::error_code Error; 

            std::cout << "MKFAConnection::operator()() - Reading..." << std::endl;
            m_Socket->read_some( boost::asio::buffer( Buffer, sizeof( Buffer ) ), Error ); 

            if( !Error ){
                // This line is getting skipped!?!?!?
                MKFAHttpRequest Request( std::string( Buffer ) );

                m_Socket->write_some( boost::asio::buffer( std::string( "Hello World" ) ) ); 

            } else break; 

        } else break; 

    }

}

Solution

  • MKFAHttpRequest Request( std::string( Buffer ) );
    

    This line doesn't do what you think it does. You think it defines an object named Request of type MKFAHttpRequest and initializes the object with a temporary object of type std::string.

    In fact, it declares a function named Request which accepts a single parameter of type std::string and returns an object of type MKFAHttpRequest.

    This is related to (or perhaps an example of) the most vexing parse.

    Perhaps one of these will make it better:

    MKFAHttpRequest Request( (std::string( Buffer )) );
    MKFAHttpRequest Request{ std::string( Buffer ) };
    MKFAHttpRequest Request = std::string( Buffer );
    MKFAHttpRequest Request = MKFAHttpRequest(std::string( Buffer ));
    

    Ref: http://en.wikipedia.org/wiki/Most_vexing_parse