C++ C+中的统一初始化语法+;11

C++ C+中的统一初始化语法+;11,c++,c++11,uniform-initialization,C++,C++11,Uniform Initialization,关于C++11中“统一初始化语法”的问题 在C++11中使用下一个语法初始化结构合法吗(请看第128-137行)?还是POD仍然是真实的 MSVC 2013编译器的问题。此示例成功编译,但因错误的函数调用异常而崩溃。这告诉我std::function对象没有正确初始化 顺便说一下,ICC13.0无法编译示例中的代码 示例.cpp(130):错误#2084:指示符不能指定非POD(普通旧数据)子对象 这是编译器的缺陷吗?或者编译器都可以,而这种方法不符合C++11 下面是一个简短的例子: #in

关于C++11中“统一初始化语法”的问题

在C++11中使用下一个语法初始化结构合法吗(请看第128-137行)?还是POD仍然是真实的

MSVC 2013编译器的问题。此示例成功编译,但因错误的函数调用异常而崩溃。这告诉我std::function对象没有正确初始化

顺便说一下,ICC13.0无法编译示例中的代码

示例.cpp(130):错误#2084:指示符不能指定非POD(普通旧数据)子对象

这是编译器的缺陷吗?或者编译器都可以,而这种方法不符合C++11

下面是一个简短的例子:

#include <functional>
#include <memory>

struct dispatcher_t {};
struct binder_t {};

struct factories_t
{
    std::function< std::unique_ptr< dispatcher_t > () > m_disp_factory;
    std::function< std::unique_ptr< binder_t > () > m_bind_factory;
};

std::unique_ptr< dispatcher_t >
create_dispatcher()
{
    return std::unique_ptr< dispatcher_t >( new dispatcher_t() );
}

std::unique_ptr< binder_t >
create_binder()
{
    return std::unique_ptr< binder_t >( new binder_t() );
}

void main()
{
    factories_t f{
        []() { return create_dispatcher(); },
        []() { return create_binder(); }
    };
}
#包括
#包括
结构调度器{};
结构绑定器{};
结构工厂
{
std::function()>m\u disp\u工厂;
std::function()>m_bind_工厂;
};
std::unique\u ptr
创建调度程序()
{
返回std::unique_ptr(new dispatcher_t());
}
标准::唯一的\u ptr
创建活页夹()
{
返回std::unique_ptr(new binder_t());
}
void main()
{
工厂{
[](){return create_dispatcher();},
[](){return create_binder();}
};
}

<代码> 第一:<代码>无效main <代码>在C++中是非法的。使用
int main

Microsoft Visual Studio 2013不是C++11类的明星。英特尔的编译器版本13也不是,因为他们有版本14。也就是说,您可以尝试,这在语言支持方面稍微好一点

如果要查看代码是否有效,请使用最新版本的GCC或Clang,这两个版本都可以在上获得

<> P>网站上的C++语言特点:

<> P>任何其他C++编译器都不值得一提WRT C++ 11。 请注意,这些页面上可能未提及标准库功能


您正在查找的功能通常位于“(常规)初始值设定项列表中。”

使用markdown将代码放在此处,不要使用PasteBin这是一段相当长的代码。请将其简化为最小的示例,然后编辑问题,使用
代码标记来显示它。
。不可能在此处放置SSCCE吗?对不起,我不会浏览大量的代码!我已经更新了这个问题。添加了简短的示例…-ICC13的“通用初始值设定项列表”中的“部分”可能就是它不编译此文件的原因。