std:地图的第三个模板参数(比较函数)用lambda编译出错

std::map的第三个模板参数(比较函数)用lambda编译出错.
下面这几行程序会有编译错误:
我定义了一个function名叫f,想把它给map作为第三个参数(一个functor类型)
C/C++ code

#include<map>
#include<string>
using namespace std;
int main(int argc, char* argv[])
{
    map<string,string,less<string>> ms1;//OK
    auto f=[](const string& s1,const string& s2)->bool{
        return s1<s1;
    };
    map<string,string,decltype(f)> mss;
    return 0;
}


如果我把map的声明变成map<string,string,f> mss;也不行。
只有用传统的方法,声明一个functor才没有问题:
C/C++ code

    struct f{
        bool operator()(const string& s1,const string& s2){
            return s1<s1;
        }
    };
    map<string,string,f> mss;


-------------------------为什么用lambda来做第三个模板参数就不行呢?

VC的编译错误是这样的: 没看懂什么叫不能声明lambda的instance
C/C++ code

1>c:\program files\microsoft visual studio 10.0\vc\include\map(104): error C3497: you cannot construct an instance of a lambda
1>          c:\program files\microsoft visual studio 10.0\vc\include\map(104) : while compiling class template member function 'std::map<_Kty,_Ty,_Pr>::map(void)'
1>          with
1>          [
1>              _Kty=std::string,
1>              _Ty=std::string,
1>              _Pr=`anonymous-namespace'::<lambda0>
1>          ]
1>          d:\proj\test10\testtype\testtype.cpp(16) : see reference to class template instantiation 'std::map<_Kty,_Ty,_Pr>' being compiled
1>          with
1>          [
1>              _Kty=std::string,
1>              _Ty=std::string,
1>              _Pr=`anonymous-namespace'::<lambda0>
1>          ]
1>



GCC4.7的编译错误是这样的,更看不懂了。
C/C++ code

D:\>g++ my.cpp -std=c++11
In file included from d:\software\mingw9\bin\../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/map:60:0,
                 from my.cpp:1:
d:\software\mingw9\bin\../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/bits/stl_tree.h: In instantiation of 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Rb_tree_impl<_Ke
_compare, _Is_pod_comparator>::_Rb_tree_impl() [with _Key_compare = main(int, char**)::<lambda(const string&, const string&)>; bool _Is_pod_comparator = false; _Key = std::basic_string<char>; _Val =
td::pair<const std::basic_string<char>, std::basic_string<char> >; _KeyOfValue = std::_Select1st<std::pair<const std::basic_string<char>, std::basic_string<char> > >; _Compare = main(int, char**)::<l
mbda(const string&, const string&)>; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > >]':
d:\software\mingw9\bin\../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/bits/stl_tree.h:623:18:   required from 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Rb_tree() [wi
h _Key = std::basic_string<char>; _Val = std::pair<const std::basic_string<char>, std::basic_string<char> >; _KeyOfValue = std::_Select1st<std::pair<const std::basic_string<char>, std::basic_string<c
ar> > >; _Compare = main(int, char**)::<lambda(const string&, const string&)>; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char> > >]'
d:\software\mingw9\bin\../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/bits/stl_map.h:155:14:   required from 'std::map<_Key, _Tp, _Compare, _Alloc>::map() [with _Key = std::basic_stri
g<char>; _Tp = std::basic_string<char>; _Compare = main(int, char**)::<lambda(const string&, const string&)>; _Alloc = std::allocator<std::pair<const std::basic_string<char>, std::basic_string<char>
 >]'
my.cpp:10:36:   required from here
d:\software\mingw9\bin\../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/bits/stl_tree.h:445:21: error: use of deleted function 'main(int, char**)::<lambda(const string&, const string&)>
:<lambda>()'
my.cpp:7:13: note: a lambda closure type has a deleted default constructor