C++ 在映射中将lambda用作比较器时出现匿名类型警告

C++ 在映射中将lambda用作比较器时出现匿名类型警告,c++,c++11,lambda,C++,C++11,Lambda,我有一个映射,它使用对象的日期字段来确定映射顺序。为此,我使用lambda表达式来处理比较。这很好,但我收到一条警告,警告说:'Foo'有一个字段'Foo::m_date_map',其类型使用匿名名称空间问题似乎在于我为该类型添加了别名。我在一个答案中看到修复方法是命名匿名类型,但我不确定如何命名 //In Foo.h static constexpr auto compare_by_date = [](const date_key* lhs, const date_key* rhs) {

我有一个映射,它使用对象的日期字段来确定映射顺序。为此,我使用lambda表达式来处理比较。这很好,但我收到一条警告,警告说:'Foo'有一个字段'Foo::m_date_map',其类型使用匿名名称空间问题似乎在于我为该类型添加了别名。我在一个答案中看到修复方法是命名匿名类型,但我不确定如何命名

//In Foo.h

static constexpr auto compare_by_date = [](const date_key* lhs, const date_key* rhs) {
    return std::tie(lhs->year, lhs->month, lhs->day) < std::tie(rhs->year, rhs->month, rhs->day);
};

class Foo {
  using ValueMap = std::map<double, date_key* const>;
  using DateMap = std::map<date_key* const, ValueMap *, decltype(compare_by_date)>;

  DateMap * m_date_map;

  Foo();

}

//In Foo.cpp
Foo::Foo() : m_date_map(new DateMap(compare_by_date) {
    // Do something
}
//在Foo.h中
静态constexpr按日期自动比较(const-date\u-key*lhs,const-date\u-key*rhs){
返回std::tie(左侧->年,左侧->月,左侧->日)年,右侧->月,右侧->日);
};
福班{
使用ValueMap=std::map;
使用DateMap=std::map;
日期地图*m_日期地图;
Foo();
}
//在Foo.cpp中
Foo::Foo():m_date_map(新的日期映射(按日期比较){
//做点什么
}

我应该如何摆脱警告?

我认为将lambda转换为
std::function
会起作用

static constexpr std::function<bool(const date_key*, const date_key*)> compare_by_date = ...
static constepr std::function compare_by_date=。。。

这消除了警告,但有趣的是,语句不能再是constexpr,因为变量“不是文字,因为它有一个非平凡的析构函数”。我不确定我是否完全理解错误,但丢失constexpr会将其清除。