shared_ptrをweak_ptrに変換するヘルパ関数

// shand/to_weak.hpp
#include <boost/config.hpp>
#include <memory>

namespace shand {

template <class T>
std::weak_ptr<T> to_weak(const std::shared_ptr<T>& sp) BOOST_NOEXCEPT
{
    return sp;
}

C++14から入った、ラムダ式のキャプチャでの初期化で使用する。

#include <iostream>
#include <memory>
#include <shand/to_weak.hpp>

int main()
{
    std::shared_ptr<int> sp(new int(3));

    auto f = [wp = shand::to_weak(sp)] { // これ
        if (std::shared_ptr<int> sp = wp.lock()) {
            std::cout << *sp << std::endl;
        }
    };

    f();
}

出力:

3