← Back to team overview

kicad-developers team mailing list archive

[PATCH] fix object slicing bug introduced by the clone semantics of boost::ptr_vector (substitute by vector of unique_ptr)

 

Hey,

attached a fix to remove object slicing issues.

I'm sorry that my other patch is delaying, I switched over to git and need to get going again (running into a few kicad crashes due to msvc-debug libraries being very thorough).

Michael

>From 326cf3de948b4def16542ffda3f930a0ee618088 Mon Sep 17 00:00:00 2001
From: decimad <michsteinb@xxxxxxxxx>
Date: Sat, 2 Jul 2016 15:56:56 +0200
Subject: [PATCH] fix object slicing bug introduced by the clone semantics of
 boost::ptr_vector (substitute by vector of unique_ptr)

---
 common/config_params.cpp               | 46 ++++++++++++-------------
 cvpcb/cfg.cpp                          |  6 ++--
 eeschema/class_library.cpp             |  4 +--
 eeschema/eeschema.cpp                  |  4 +--
 eeschema/eeschema_config.cpp           | 32 +++++++++---------
 gerbview/gerbview_config.cpp           | 14 ++++----
 include/config_params.h                |  9 ++---
 include/project.h                      |  8 +++--
 pagelayout_editor/pl_editor_config.cpp |  3 +-
 pcbnew/class_board_design_settings.cpp | 24 ++++++-------
 pcbnew/class_pad.cpp                   |  8 ++---
 pcbnew/modeditoptions.cpp              | 36 ++++++++++----------
 pcbnew/pcbnew_config.cpp               | 62 +++++++++++++++++-----------------
 13 files changed, 129 insertions(+), 127 deletions(-)

diff --git a/common/config_params.cpp b/common/config_params.cpp
index 9737e8e..c1603d9 100644
--- a/common/config_params.cpp
+++ b/common/config_params.cpp
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@xxxxxxxxxxxxxxxxxx
  * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,17 +43,17 @@ void wxConfigLoadParams( wxConfigBase* aCfg,
 {
     wxASSERT( aCfg );
 
-    for( const PARAM_CFG_BASE& param : aList )
+    for( const std::unique_ptr< PARAM_CFG_BASE >& param : aList )
     {
-        if( !!param.m_Group )
-            aCfg->SetPath( param.m_Group );
+        if( !!param->m_Group )
+            aCfg->SetPath( param->m_Group );
         else
             aCfg->SetPath( aGroup );
 
-        if( param.m_Setup )
+        if( param->m_Setup )
             continue;
 
-        param.ReadParam( aCfg );
+        param->ReadParam( aCfg );
     }
 }
 
@@ -62,12 +62,12 @@ void wxConfigLoadSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList )
 {
     wxASSERT( aCfg );
 
-    for( const PARAM_CFG_BASE& param : aList )
+    for( const std::unique_ptr< PARAM_CFG_BASE >& param : aList )
     {
-        if( !param.m_Setup )
+        if( !param->m_Setup )
             continue;
 
-        param.ReadParam( aCfg );
+        param->ReadParam( aCfg );
     }
 }
 
@@ -77,24 +77,24 @@ void wxConfigSaveParams( wxConfigBase* aCfg,
 {
     wxASSERT( aCfg );
 
-    for( const PARAM_CFG_BASE& param : aList )
+    for( const std::unique_ptr< PARAM_CFG_BASE >& param : aList )
     {
-        if( !!param.m_Group )
-            aCfg->SetPath( param.m_Group );
+        if( !!param->m_Group )
+            aCfg->SetPath( param->m_Group );
         else
             aCfg->SetPath( aGroup );
 
-        if( param.m_Setup )
+        if( param->m_Setup )
             continue;
 
-        if( param.m_Type == PARAM_COMMAND_ERASE )       // Erase all data
+        if( param->m_Type == PARAM_COMMAND_ERASE )       // Erase all data
         {
-            if( !!param.m_Ident )
-                aCfg->DeleteGroup( param.m_Ident );
+            if( !!param->m_Ident )
+                aCfg->DeleteGroup( param->m_Ident );
         }
         else
         {
-            param.SaveParam( aCfg );
+            param->SaveParam( aCfg );
         }
     }
 }
@@ -104,19 +104,19 @@ void wxConfigSaveSetups( wxConfigBase* aCfg, const PARAM_CFG_ARRAY& aList )
 {
     wxASSERT( aCfg );
 
-    for( const PARAM_CFG_BASE& param : aList )
+    for( const std::unique_ptr< PARAM_CFG_BASE >& param : aList )
     {
-        if( !param.m_Setup )
+        if( !param->m_Setup )
             continue;
 
-        if( param.m_Type == PARAM_COMMAND_ERASE )       // Erase all data
+        if( param->m_Type == PARAM_COMMAND_ERASE )       // Erase all data
         {
-            if( !!param.m_Ident )
-                aCfg->DeleteGroup( param.m_Ident );
+            if( !!param->m_Ident )
+                aCfg->DeleteGroup( param->m_Ident );
         }
         else
         {
-            param.SaveParam( aCfg );
+            param->SaveParam( aCfg );
         }
     }
 }
diff --git a/cvpcb/cfg.cpp b/cvpcb/cfg.cpp
index fe80064..e57a93a 100644
--- a/cvpcb/cfg.cpp
+++ b/cvpcb/cfg.cpp
@@ -2,7 +2,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
- * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -47,9 +47,9 @@ PARAM_CFG_ARRAY& CVPCB_MAINFRAME::GetProjectFileParameters()
     if( !m_projectFileParams.empty() )
         return m_projectFileParams;
 
-    m_projectFileParams.push_back( new PARAM_CFG_BASE( GROUP_PCB_LIBS, PARAM_COMMAND_ERASE ) );
+    m_projectFileParams.emplace_back( new PARAM_CFG_BASE( GROUP_PCB_LIBS, PARAM_COMMAND_ERASE ) );
 
-    m_projectFileParams.push_back( new PARAM_CFG_LIBNAME_LIST(
+    m_projectFileParams.emplace_back( new PARAM_CFG_LIBNAME_LIST(
         wxT( "EquName" ), &m_EquFilesNames, GROUP_CVP_EQU ) );
 
     return m_projectFileParams;
diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp
index 5e27a6e..64c5edd 100644
--- a/eeschema/class_library.cpp
+++ b/eeschema/class_library.cpp
@@ -1033,10 +1033,10 @@ void PART_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave,
     PARAM_CFG_ARRAY ca;
 
     if( aPaths )
-        ca.push_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ), aPaths ) );
+        ca.emplace_back( new PARAM_CFG_FILENAME( wxT( "LibDir" ), aPaths ) );
 
     if( aNames )
-        ca.push_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ),  aNames, GROUP_SCH_LIBS ) );
+        ca.emplace_back( new PARAM_CFG_LIBNAME_LIST( wxT( "LibName" ),  aNames, GROUP_SCH_LIBS ) );
 
     if( doSave )
     {
diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp
index 1c77039..539e740 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@xxxxxxxxxxxxxxxxxx
  * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2004-2016 KiCad Developers, see change_log.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -175,7 +175,7 @@ static PARAM_CFG_ARRAY& cfg_params()
         // eeschema KIFACE comes in.
 
 #define CLR(x, y, z)\
-    ca.push_back( new PARAM_CFG_SETCOLOR( true, wxT( x ), &s_layerColor[y], z ) );
+    ca.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( x ), &s_layerColor[y], z ) );
 
         CLR( "ColorWireEx",             LAYER_WIRE,             GREEN )
         CLR( "ColorBusEx",              LAYER_BUS,              BLUE )
diff --git a/eeschema/eeschema_config.cpp b/eeschema/eeschema_config.cpp
index eb2ed23..a41a7ed 100644
--- a/eeschema/eeschema_config.cpp
+++ b/eeschema/eeschema_config.cpp
@@ -396,16 +396,16 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetProjectFileParametersList()
     if( !m_projectFileParams.empty() )
         return m_projectFileParams;
 
-    m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ),
                                         &BASE_SCREEN::m_PageLayoutDescrFileName ) );
 
-    m_projectFileParams.push_back( new PARAM_CFG_FILENAME( wxT( "PlotDirectoryName" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_FILENAME( wxT( "PlotDirectoryName" ),
                                         &m_plotDirectoryName ) );
 
-    m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "SubpartIdSeparator" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_INT( wxT( "SubpartIdSeparator" ),
                                         LIB_PART::SubpartIdSeparatorPtr(),
                                         0, 0, 126 ) );
-    m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "SubpartFirstId" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_INT( wxT( "SubpartFirstId" ),
                                         LIB_PART::SubpartFirstIdPtr(),
                                         'A', '1', 'z' ) );
 
@@ -417,18 +417,18 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetProjectFileParametersList()
                                                                GROUP_SCH_LIBS ) );
     */
 
-    m_projectFileParams.push_back( new PARAM_CFG_WXSTRING( wxT( "NetFmtName" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_WXSTRING( wxT( "NetFmtName" ),
                                             &m_netListFormat) );
-    m_projectFileParams.push_back( new PARAM_CFG_BOOL( wxT( "SpiceForceRefPrefix" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_BOOL( wxT( "SpiceForceRefPrefix" ),
                                             &m_spiceNetlistAddReferencePrefix, false ) );
-    m_projectFileParams.push_back( new PARAM_CFG_BOOL( wxT( "SpiceUseNetNumbers" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_BOOL( wxT( "SpiceUseNetNumbers" ),
                                             &m_spiceNetlistUseNetcodeAsNetname, false ) );
 
-    m_projectFileParams.push_back( new PARAM_CFG_INT( wxT( "LabSize" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_INT( wxT( "LabSize" ),
                                             &s_defaultTextSize,
                                             DEFAULT_SIZE_TEXT, 5, 1000 ) );
 
-    m_projectFileParams.push_back( new PARAM_CFG_BOOL( wxT( "ERC_TestSimilarLabels" ),
+    m_projectFileParams.emplace_back( new PARAM_CFG_BOOL( wxT( "ERC_TestSimilarLabels" ),
                                             &DIALOG_ERC::m_TestSimilarLabels, true ) );
 
     return m_projectFileParams;
@@ -546,27 +546,27 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings()
     if( !m_configSettings.empty() )
         return m_configSettings;
 
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, ShowPageLimitsEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, ShowPageLimitsEntry,
                                                     &m_showPageLimits, true ) );
-    m_configSettings.push_back( new PARAM_CFG_INT( true, UnitsEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, UnitsEntry,
                                                    (int*)&g_UserUnit, MILLIMETRES ) );
 
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, PrintMonochromeEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, PrintMonochromeEntry,
                                                     &m_printMonochrome, true ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, PrintSheetRefEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, PrintSheetRefEntry,
                                                     &m_printSheetReference, true ) );
 
-    m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatStepXEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, RepeatStepXEntry,
                                                       &m_repeatStep.x,
                                                       DEFAULT_REPEAT_OFFSET_X,
                                                       -REPEAT_OFFSET_MAX,
                                                       REPEAT_OFFSET_MAX ) );
-    m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatStepYEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, RepeatStepYEntry,
                                                       &m_repeatStep.y,
                                                       DEFAULT_REPEAT_OFFSET_Y,
                                                       -REPEAT_OFFSET_MAX,
                                                       REPEAT_OFFSET_MAX ) );
-    m_configSettings.push_back( new PARAM_CFG_INT( true, RepeatLabelIncrementEntry,
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, RepeatLabelIncrementEntry,
                                                       &m_repeatDeltaLabel,
                                                       DEFAULT_REPEAT_LABEL_INC, -10, +10 ) );
     return m_configSettings;
diff --git a/gerbview/gerbview_config.cpp b/gerbview/gerbview_config.cpp
index 7d35e06..0eeaf1c 100644
--- a/gerbview/gerbview_config.cpp
+++ b/gerbview/gerbview_config.cpp
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2007 Jean-Pierre Charras, jaen-pierre.charras@xxxxxxxxxxxxxxxxxx
  * Copyright (C) 2009 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -82,22 +82,22 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings()
     if( !m_configSettings.empty() )
         return m_configSettings;
 
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "Units" ),
                                                    (int*) &g_UserUnit, 0, 0, 1 ) );
 
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "DrawModeOption" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "DrawModeOption" ),
                                                    &m_displayMode, 2, 0, 2 ) );
-    m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true,
+    m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true,
                                                         wxT( "DCodeColorEx" ),
                                                         &g_ColorsSettings.m_ItemsColors[
                                                             DCODES_VISIBLE],
                                                         WHITE ) );
-    m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true,
+    m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true,
                                                         wxT( "NegativeObjectsColorEx" ),
                                                         &g_ColorsSettings.m_ItemsColors[
                                                             NEGATIVE_OBJECTS_VISIBLE],
                                                         DARKGRAY ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true,
                                                     wxT( "DisplayPolarCoordinates" ),
                                                     &m_DisplayOptions.m_DisplayPolarCood,
                                                     false ) );
@@ -139,7 +139,7 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings()
         PARAM_CFG_SETCOLOR* prm_entry =
             new PARAM_CFG_SETCOLOR( true, keys[i], prm, color_default[i] );
 
-        m_configSettings.push_back( prm_entry );
+        m_configSettings.emplace_back( prm_entry );
     }
 
     return m_configSettings;
diff --git a/include/config_params.h b/include/config_params.h
index 0425e94..2fac909 100644
--- a/include/config_params.h
+++ b/include/config_params.h
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@xxxxxxxxxxxxxxxxxx
  * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -33,9 +33,9 @@
 
 #include <wx/confbase.h>
 #include <wx/fileconf.h>
-#include <boost/ptr_container/ptr_vector.hpp>
 #include <colors.h>
 #include <limits>
+#include <memory>
 
 /// Names of sub sections where to store project info in *.pro project config files
 #define GROUP_PCB           wxT( "/pcbnew" )            /// parameters for Pcbnew/Modedit
@@ -301,10 +301,7 @@ public:
 
 
 /** A list of parameters type */
-//typedef boost::ptr_vector<PARAM_CFG_BASE> PARAM_CFG_ARRAY;
-class  PARAM_CFG_ARRAY : public boost::ptr_vector<PARAM_CFG_BASE>
-{
-};
+using PARAM_CFG_ARRAY = std::vector< std::unique_ptr< PARAM_CFG_BASE > >;
 
 
 /**
diff --git a/include/project.h b/include/project.h
index e3fd292..abb0f8c 100644
--- a/include/project.h
+++ b/include/project.h
@@ -1,7 +1,7 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
+ * Copyright (C) 2014-2016 KiCad Developers, see CHANGELOG.TXT for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -25,6 +25,7 @@
 #define PROJECT_H_
 
 #include <vector>
+#include <memory>
 #include <wx/string.h>
 #include <wx/filename.h>
 
@@ -34,7 +35,10 @@
 
 
 class wxConfigBase;
-class PARAM_CFG_ARRAY;
+
+class PARAM_CFG_BASE;
+using PARAM_CFG_ARRAY = std::vector< std::unique_ptr< PARAM_CFG_BASE > >;
+
 class FP_LIB_TABLE;
 class PART_LIBS;
 class SEARCH_STACK;
diff --git a/pagelayout_editor/pl_editor_config.cpp b/pagelayout_editor/pl_editor_config.cpp
index d3cfca9..3e094f5 100644
--- a/pagelayout_editor/pl_editor_config.cpp
+++ b/pagelayout_editor/pl_editor_config.cpp
@@ -8,6 +8,7 @@
  *
  * Copyright (C) 2013 CERN
  * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -97,7 +98,7 @@ PARAM_CFG_ARRAY& PL_EDITOR_FRAME::GetConfigurationSettings()
     if( !m_configSettings.empty() )
         return m_configSettings;
 
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "Units" ),
                                                    (int*) &g_UserUnit, 0, 0, 1 ) );
 
     return m_configSettings;
diff --git a/pcbnew/class_board_design_settings.cpp b/pcbnew/class_board_design_settings.cpp
index d53a208..7afc32f 100644
--- a/pcbnew/class_board_design_settings.cpp
+++ b/pcbnew/class_board_design_settings.cpp
@@ -1,7 +1,7 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -117,60 +117,60 @@ void BOARD_DESIGN_SETTINGS::AppendConfigs( PARAM_CFG_ARRAY* aResult )
 {
     m_Pad_Master.AppendConfigs( aResult );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeV" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeV" ),
                     &m_PcbTextSize.y,
                     Millimeter2iu( DEFAULT_TEXT_PCB_SIZE  ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeH" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextSizeH" ),
                     &m_PcbTextSize.x,
                     Millimeter2iu( DEFAULT_TEXT_PCB_SIZE  ), TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextThickness" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PcbTextThickness" ),
                     &m_PcbTextWidth,
                     Millimeter2iu(DEFAULT_TEXT_PCB_THICKNESS ),
                     Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeV" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeV" ),
                     &m_ModuleTextSize.y,
                     DEFAULT_TEXT_MODULE_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeH" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeH" ),
                     &m_ModuleTextSize.x,
                     DEFAULT_TEXT_MODULE_SIZE, TEXTS_MIN_SIZE, TEXTS_MAX_SIZE,
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeThickness" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleTextSizeThickness" ),
                     &m_ModuleTextWidth,
                     Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ), 1, TEXTS_MAX_WIDTH,
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskClearance" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskClearance" ),
                     &m_SolderMaskMargin,
                     Millimeter2iu( DEFAULT_SOLDERMASK_CLEARANCE ), 0, Millimeter2iu( 1.0 ),
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskMinWidth" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "SolderMaskMinWidth" ),
                     &m_SolderMaskMinWidth,
                     Millimeter2iu( DEFAULT_SOLDERMASK_MIN_WIDTH ), 0, Millimeter2iu( 0.5 ),
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "DrawSegmentWidth" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "DrawSegmentWidth" ),
                     &m_DrawSegmentWidth,
                     Millimeter2iu( DEFAULT_GRAPHIC_THICKNESS ),
                     Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "BoardOutlineThickness" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "BoardOutlineThickness" ),
                     &m_EdgeSegmentWidth,
                     Millimeter2iu( DEFAULT_PCB_EDGE_THICKNESS ),
                     Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
                     NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleOutlineThickness" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "ModuleOutlineThickness" ),
                     &m_ModuleSegmentWidth,
                     Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
                     Millimeter2iu( 0.01 ), Millimeter2iu( 5.0 ),
diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp
index a5129cc..8aa7dc2 100644
--- a/pcbnew/class_pad.cpp
+++ b/pcbnew/class_pad.cpp
@@ -328,25 +328,25 @@ void D_PAD::AppendConfigs( PARAM_CFG_ARRAY* aResult )
     // Parameters stored in config are only significant parameters
     // for a template.
     // So not all parameters are stored, just few.
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrill" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrill" ),
                             &m_Drill.x,
                             Millimeter2iu( 0.6 ),
                             Millimeter2iu( 0.1 ), Millimeter2iu( 10.0 ),
                             NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrillOvalY" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrillOvalY" ),
                             &m_Drill.y,
                             Millimeter2iu( 0.6 ),
                             Millimeter2iu( 0.1 ), Millimeter2iu( 10.0 ),
                             NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeH" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeH" ),
                             &m_Size.x,
                             Millimeter2iu( 1.4 ),
                             Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ),
                             NULL, MM_PER_IU ) );
 
-    aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeV" ),
+    aResult->emplace_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeV" ),
                             &m_Size.y,
                             Millimeter2iu( 1.4 ),
                             Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ),
diff --git a/pcbnew/modeditoptions.cpp b/pcbnew/modeditoptions.cpp
index ac06b7f..cec3aec 100644
--- a/pcbnew/modeditoptions.cpp
+++ b/pcbnew/modeditoptions.cpp
@@ -4,7 +4,7 @@
  * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
  * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
  * Copyright (C) 2015 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
 *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -90,59 +90,59 @@ PARAM_CFG_ARRAY& FOOTPRINT_EDIT_FRAME::GetConfigurationSettings()
     m_configSettings.clear();   // boost::ptr_vector destroys the pointers inside
 
     // Display options:
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "FpEditorUnits" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "FpEditorUnits" ),
                                                     (int*)&g_UserUnit, MILLIMETRES ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorDisplayPolarCoords" ),
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorDisplayPolarCoords" ),
                                                     &displ_opts->m_DisplayPolarCood, false ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorPadDisplayMode" ),
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorPadDisplayMode" ),
                                                     &displ_opts->m_DisplayPadFill, true ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorGraphicLinesDisplayMode" ),
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorGraphicLinesDisplayMode" ),
                                                     &displ_opts->m_DisplayModEdgeFill, FILLED ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorTextsDisplayMode" ),
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorTextsDisplayMode" ),
                                                     &displ_opts->m_DisplayModTextFill, FILLED ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorTextsDisplayMode" ),
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "FpEditorTextsDisplayMode" ),
                                                     &displ_opts->m_DisplayModTextFill, FILLED ) );
-    m_configSettings.push_back( new PARAM_CFG_WXSTRING( true, wxT( "FpEditorTextsRefDefaultText" ),
+    m_configSettings.emplace_back( new PARAM_CFG_WXSTRING( true, wxT( "FpEditorTextsRefDefaultText" ),
                                                     &settings.m_RefDefaultText, wxT( "REF**" ) ) );
 
     // design settings
-    m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorGrlineWidth" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorGrlineWidth" ),
                                                     &settings.m_ModuleSegmentWidth,
                                                     Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
                                                     Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ),
                                                     NULL, 1/IU_PER_MM ) );
-    m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeH" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeH" ),
                                                     &settings.m_ModuleTextSize.x,
                                                     Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ),
                                                     Millimeter2iu( 0.01 ), Millimeter2iu( 100.0 ),
                                                     NULL, 1/IU_PER_MM ) );
-    m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeV" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultSizeV" ),
                                                     &settings.m_ModuleTextSize.y,
                                                     Millimeter2iu( DEFAULT_TEXT_MODULE_SIZE ),
                                                     Millimeter2iu(0.01), Millimeter2iu( 100.0 ),
                                                     NULL, 1/IU_PER_MM ) );
-    m_configSettings.push_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultThickness" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT_WITH_SCALE( true, wxT( "FpEditorTextsDefaultThickness" ),
                                                     &settings.m_ModuleTextWidth,
                                                     Millimeter2iu( DEFAULT_GR_MODULE_THICKNESS ),
                                                     Millimeter2iu( 0.01 ), Millimeter2iu( 20.0 ),
                                                     NULL, 1/IU_PER_MM ) );
 
-    m_configSettings.push_back( new PARAM_CFG_WXSTRING( true,
+    m_configSettings.emplace_back( new PARAM_CFG_WXSTRING( true,
                                     wxT( "FpEditorRefDefaultText" ),
                                     &settings.m_RefDefaultText, wxT( "REF**" ) ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true,
                                     wxT( "FpEditorRefDefaultVisibility" ),
                                     &settings.m_RefDefaultVisibility, true ) );
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "FpEditorRefDefaultLayer" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "FpEditorRefDefaultLayer" ),
                                     &settings.m_RefDefaultlayer,
                                     int( F_SilkS ), int( F_SilkS ), int( F_Fab ) ) );
 
-    m_configSettings.push_back( new PARAM_CFG_WXSTRING( true, wxT( "FpEditorValueDefaultText" ),
+    m_configSettings.emplace_back( new PARAM_CFG_WXSTRING( true, wxT( "FpEditorValueDefaultText" ),
                                                     &settings.m_ValueDefaultText, wxT( "" ) ) );
-    m_configSettings.push_back( new PARAM_CFG_BOOL( true,
+    m_configSettings.emplace_back( new PARAM_CFG_BOOL( true,
                                     wxT( "FpEditorValueDefaultVisibility" ),
                                     &settings.m_ValueDefaultVisibility, true ) );
-    m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "FpEditorValueDefaultLayer" ),
+    m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "FpEditorValueDefaultLayer" ),
                                     &settings.m_ValueDefaultlayer,
                                     int( F_Fab ), int( F_SilkS ), int( F_Fab ) ) );
 
diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp
index 9385e6d..364e5b6 100644
--- a/pcbnew/pcbnew_config.cpp
+++ b/pcbnew/pcbnew_config.cpp
@@ -311,10 +311,10 @@ PARAM_CFG_ARRAY PCB_EDIT_FRAME::GetProjectFileParameters()
     // This one cannot be cached because some settings are going to/from the BOARD,
     // so pointers into that cannot be saved for long.
 
-    pca.push_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ),
+    pca.emplace_back( new PARAM_CFG_FILENAME( wxT( "PageLayoutDescrFile" ),
                                           &BASE_SCREEN::m_PageLayoutDescrFileName ) );
 
-    pca.push_back( new PARAM_CFG_FILENAME( wxT( "LastNetListRead" ), &m_lastNetListRead ) );
+    pca.emplace_back( new PARAM_CFG_FILENAME( wxT( "LastNetListRead" ), &m_lastNetListRead ) );
 
     GetBoard()->GetDesignSettings().AppendConfigs( &pca );
 
@@ -331,34 +331,34 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetConfigurationSettings()
         COLORS_DESIGN_SETTINGS cds;         // constructor fills this with sensible colors
 
         // Units used in dialogs and toolbars
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ),
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "Units" ),
                                                        (int*)&g_UserUnit, MILLIMETRES ) );
 
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "DisplayPolarCoords" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "DisplayPolarCoords" ),
                                                         &displ_opts->m_DisplayPolarCood, false ) );
         // Display options and modes:
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "ShowNetNamesMode" ),
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "ShowNetNamesMode" ),
                                                        &displ_opts->m_DisplayNetNamesMode, 3, 0, 3 ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "DisplayTrackFilled" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "DisplayTrackFilled" ),
                                                         &displ_opts->m_DisplayPcbTrackFill, true ) );
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "TrackDisplayClearance" ),
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "TrackDisplayClearance" ),
                                                        (int*) &displ_opts->m_ShowTrackClearanceMode,
                                                        SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadFill" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "PadFill" ),
                                                         &displ_opts->m_DisplayPadFill, true ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ViaFill" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "ViaFill" ),
                                                         &displ_opts->m_DisplayViaFill, true ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadAffG" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "PadAffG" ),
                                                         &displ_opts->m_DisplayPadIsol, true ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PadSNum" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "PadSNum" ),
                                                         &displ_opts->m_DisplayPadNum, true ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ModAffC" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "ModAffC" ),
                                                        &displ_opts->m_DisplayModEdgeFill, FILLED ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ModAffT" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "ModAffT" ),
                                                        &displ_opts->m_DisplayModTextFill, FILLED ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PcbAffT" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "PcbAffT" ),
                                                        &displ_opts->m_DisplayDrawItemsFill, FILLED ) );
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "PcbShowZonesMode" ),
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "PcbShowZonesMode" ),
                                                        &displ_opts->m_DisplayZonesMode, 0, 0, 2 ) );
 
         // layer colors:
@@ -369,49 +369,49 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetConfigurationSettings()
                             wxT( "ColorPCBLayer_%s" ),
                             LSET::Name( LAYER_ID( i ) ) );
 
-            m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, vn, LOC_COLOR( i ), cds.m_LayersColors[i] ) );
+            m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, vn, LOC_COLOR( i ), cds.m_LayersColors[i] ) );
         }
 
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtFrontEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtFrontEx" ),
                                                             ITEM_COLOR( MOD_TEXT_FR_VISIBLE ),
                                                             LIGHTGRAY ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtBackEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtBackEx" ),
                                                             ITEM_COLOR( MOD_TEXT_BK_VISIBLE ),
                                                             BLUE ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtInvisEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorTxtInvisEx" ),
                                                             ITEM_COLOR( MOD_TEXT_INVISIBLE ),
                                                             DARKGRAY ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorAnchorEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorAnchorEx" ),
                                                             ITEM_COLOR( ANCHOR_VISIBLE ), BLUE ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorPadBackEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorPadBackEx" ),
                                                             ITEM_COLOR( PAD_BK_VISIBLE ), GREEN ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorPadFrontEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorPadFrontEx" ),
                                                             ITEM_COLOR( PAD_FR_VISIBLE ), RED ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaThruEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaThruEx" ),
                                                             ITEM_COLOR( VIA_THROUGH_VISIBLE ),
                                                             LIGHTGRAY ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaBBlindEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaBBlindEx" ),
                                                             ITEM_COLOR( VIA_BBLIND_VISIBLE ),
                                                             BROWN ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaMicroEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorViaMicroEx" ),
                                                             ITEM_COLOR( VIA_MICROVIA_VISIBLE ),
                                                             CYAN ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorNonPlatedEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorNonPlatedEx" ),
                                                             ITEM_COLOR( NON_PLATED_VISIBLE ),
                                                             YELLOW ) );
-        m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorRatsEx" ),
+        m_configSettings.emplace_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorRatsEx" ),
                                                             ITEM_COLOR( RATSNEST_VISIBLE ),
                                                             WHITE ) );
 
         // Miscellaneous:
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "RotationAngle" ), &m_rotationAngle,
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "RotationAngle" ), &m_rotationAngle,
                                                        900, 1, 900 ) );
-        m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "MaxLnkS" ),
+        m_configSettings.emplace_back( new PARAM_CFG_INT( true, wxT( "MaxLnkS" ),
                                                        &displ_opts->m_MaxLinksShowed,
                                                        3, 0, 15 ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "TwoSegT" ),
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "TwoSegT" ),
                                                         &g_TwoSegmentTrackBuild, true ) );
-        m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "SegmPcb45Only" )
+        m_configSettings.emplace_back( new PARAM_CFG_BOOL( true, wxT( "SegmPcb45Only" )
                                                         , &g_Segments_45_Only, true ) );
     }
 
-- 
2.9.0.windows.1