C++14 で関数オブジェクトから関数ポインタを返すc_function を実装してみた

c_function についてははここら辺を参照して下さい。
これを C++14 でサクッと実装できないだろうかー、って事で以下の様なコードを書いてみたんですが、これを Clang 3.5(trunk) でコンパイルしてみたらコンパイラがエラー吐いた…。

[ソース]

#include <type_traits>
#include <iostream>

template<typename Uniq, typename F>
auto
c_function(Uniq, F func){
    static auto func_ = func;
    return [](auto... args){
        return func_(args...);
    };
}

int
main(){
    auto value = 3;
    std::common_type<int(*)(int)>::type func = c_function([]{},
        [&value](auto a){
            return a + value;
        }
    );
    std::cout << func(3) << std::endl;
    value = -2;
    std::cout << func(2) << std::endl;
    return 0;
}


どうも static 変数をラムダ内から参照しているあたりがまずいみたい。
仕様的には変数をキャプチャをしなくてもラムダ内から static 変数を参照するのは問題なかったような気がするけども(うろ覚え。
しかし、その部分は別としても関数からジェネリックラムダを返して、それを関数ポインタで受け取るとかかなり詐欺臭い動きだなーこれ。
C++14 だとこんなコードも書けてしまうのがこわい。
こういうアグレッシブなコードを書いている時が一番楽しい。