C++ 如何在c++;类函数

C++ 如何在c++;类函数,c++,clang,stdmap,C++,Clang,Stdmap,我在Ubuntu 12.04上尝试在clang-3.3和clang-3.0中使用std::map时遇到问题: #include <iostream> #include <map> #include <string> class A { public: #if 0 //clang compiles ok typedef std::map<std::string,std::string> MapKeyValue_t; void Pri

我在Ubuntu 12.04上尝试在clang-3.3和clang-3.0中使用
std::map
时遇到问题:

#include <iostream>
#include <map>
#include <string>

class A
{
public:
#if 0 //clang compiles ok
    typedef std::map<std::string,std::string> MapKeyValue_t;
    void PrintMap(const MapKeyValue_t &my_map 
        = MapKeyValue_t())
#else // clang compiles fail
    void PrintMap(const std::map<std::string,std::string> &my_map 
    = std::map<std::string,std::string>())
#endif
{
    std::map<std::string,std::string>::const_iterator it;
    for (it = my_map.begin(); it != my_map.end(); it++)
    {
        std::cout << it->first << " " << it->second << std::endl;
    }
}
};

int main()
{
    A a;
    a.PrintMap();
    return 0;
}
我能找到的最符合我问题的东西是这个主题:

但是,我不知道出了什么问题。希望有人能解释一下

更新:

void PrintMap(const std::map<std::string,std::string> &my_map 
        = (std::map<std::string,std::string>()))
void PrintMap(const std::map和my_map)
=(标准::映射())

没关系。谢谢。

我在vs2012中编译并成功运行了它。

所以我认为这是编译器的问题。

其他海报是正确的,我认为这是一个应该在Clang 3.4中修复的实例

正如bug报告中提到的和从那里链接的页面(以及您在更新中提到的),您可以通过在默认值中添加括号来解决此问题,如下所示:

void PrintMap(const std::map<std::string,std::string> &my_map 
    = (std::map<std::string,std::string>()))
void PrintMap(const std::map和my_map)
=(标准::映射())

看起来像-建议的解决方法是在默认参数周围放置parens,这会使它在此处编译。谢谢。我猜这是一个叮当虫,我也在等待叮当福克斯的帮助。你为什么使用gcc?我以前从没见过叮当声!这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论。@Jandogen虽然我同意这个答案质量很低,但实际上是一个答案(“这是一个编译器错误”)。@BlackMamba为什么不使用gcc?为什么使用vs2012?是免费的吗?好吗?clang是最好的c++11编译器之一。这似乎是一个罕见的小故障。
void PrintMap(const std::map<std::string,std::string> &my_map 
    = (std::map<std::string,std::string>()))