Iniciar un std :: thread con enlace estático causa un error de segmentación

Para aprender c ++ 11 (y boost) estoy escribiendo un servidor http simple usando boost asio y c ++ 11 (para subprocesos y lambdas).

Quiero probar el nuevo c ++ 11 lambdas y std :: thread, así que intenté iniciar elio_service.run() como esto en un std :: hilo con una lambda:

#include <iostream>
#include <thread>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using std::cout;
using std::endl;
using boost::asio::ip::tcp;

class HttpServer
{
public:
    HttpServer(std::size_t thread_pool_size)
    : io_service_(),
    endpoint_(boost::asio::ip::tcp::v4(), 8000),
    acceptor_(io_service_, endpoint_)
    { }

    void Start() {
        acceptor_.listen();
        cout << "Adr before " << &io_service_ << endl;
        std::thread io_thread([this](){
            cout << "Adr inside " << &io_service_ << endl;
            io_service_.run();
        });
        io_thread.join();
    }

private:
    boost::asio::io_service io_service_;
    tcp::endpoint endpoint_;
    tcp::acceptor acceptor_;
};

int main() {
    HttpServer server(2);
    server.Start();
}

Esto termina con una falla de segmentación. Además, a veces se ejecuta cout dentro de la lambda, a veces no (aunque endl debería enjuagarse). En cualquier caso, imprime la dirección correcta deio_service_. Sin embargo, cuando reemplazo elstd::thread con unboost::thread (¡ningún otro cambio!), todo funciona bien.

Le agradecería si alguien tiene una idea de dónde está causado el problema (podría ser asio, std :: thread o std :: lambda).

Información Adicional

Según otraenvia acceder al miembro io_service_ dentro de una lambda está bien al capturarthis, como lo hago.

Estoy ejecutando gcc 4.6.1 en Ubuntu y boost 1.46. Parámetros de G ++:

g++ -std=c++0x -static -I/home/andre/DEV/boost_1_48_0/include/ -L/home/andre/DEV/boost_1_48_0/lib/ -o webserver main.cpp -lboost_system -lboost_thread -lpthread

Actualizar

Removing -static solucionó el problema. Descubrí que el problema no tiene nada que ver con boost o lambdas y puede reproducirse cada vez que se crea estática y se usastd::thread. Por alguna razón, esta combinación no funciona. Pienso estoenvia describe casi lo mismo, sin embargo, realmente no entiendo los detalles y el mensaje de error es diferente.

Así que me pregunto por quéstd::thread y los enlaces estáticos no parecen funcionar juntos. ¿Hay alguna razón por la cual el enlace estático no está permitido aquí? Actualicé el título de la pregunta y eliminé la etiqueta de impulso.

Respuestas a la pregunta(4)

Su respuesta a la pregunta