← Back to team overview

kicad-developers team mailing list archive

Re: Exception specifiers deprecated in c++11

 

Thank you wayne!

If you ever change your mind about the fix-as-find, i actually went ahead and cleaned up my previous patch. I noticed that I had actually "fixed" space line-endings in all of them, therefore resulting in the humongous patch previously.

This patch is a lot less intrusive.

- Kristoffer

On 2017-06-12 18:24, Wayne Stambaugh wrote:
Kristoffer,

I committed your path.  Thank you for your contribution to KiCad.

To answer your question about C++11.  Yes, the goal is to make the KiCad
source C++11 compliant.  I've been taking a fix it as I find it (when I
actually remember) approach rather than try to make it compliant in one
shot.  This is primarily to prevent large disruptions in the stability
of the development branch although getting rid of the exception throw
specifiers is low risk.

Cheers,

Wayne

On 6/9/2017 4:41 AM, Kristoffer Ödmark wrote:
This is a patch that has a minimum amount of fixes at least.

But honestly, I can take the time to fix up my previous patch a bit, and
get rid of all of the exception specifiers, there are waaay to many
warnings now and it is hard to look at the output due to that.

- Kristoffer

On 2017-06-09 02:18, Chris Pavlina wrote:
On Fri, Jun 09, 2017 at 02:03:29AM +0200, Simon Richter wrote:
Hi,

On 08.06.2017 23:56, Kristoffer Ödmark wrote:

I attached a patch where i removed all of them just to show how many of
them there are, also suggest that we remove that from the coding policy
( patch 2 ).

Would it make sense to use "noexcept" still?

"noexcept" was *added* in C++11 so it's obviously allowed in C++11.

Decent explanation about this here:
http://blog.quasardb.net/when-noexcept-2/


Are there any considerations regarding becoming c++11 compatible?

We already use C++11, e.g. for range-based for and std::shared_ptr.

     Simon





_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp



_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

>From 96035ae8a754aa60d9ea4d4a6e10202ed00aefc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kristoffer=20=C3=96dmark?= <kristoffer.odmark90@xxxxxxxxx>
Date: Thu, 8 Jun 2017 23:47:21 +0200
Subject: [PATCH] Removed all exception specifiers since deprecated.

Exception specifiers are deprecated in cpp11, so went through them all
and removed them from the code.
---
 3d-viewer/3d_math.cpp                            |   2 +-
 AUTHORS.txt                                      |   1 +
 Documentation/development/coding-style-policy.md |   2 +-
 common/class_page_info.cpp                       |   3 +-
 common/dsnlexer.cpp                              |  24 +--
 common/eda_text.cpp                              |   1 -
 common/filter_reader.cpp                         |   4 +-
 common/fp_lib_table.cpp                          |   3 -
 common/lib_id.cpp                                |   5 +-
 common/lib_table_base.cpp                        |   3 +-
 common/page_layout/page_layout_reader.cpp        |  34 +---
 common/ptree.cpp                                 |  10 +-
 common/richio.cpp                                |  30 +--
 common/worksheet.cpp                             |   2 +-
 common/xnode.cpp                                 |   4 +-
 eeschema/backanno.cpp                            |   1 -
 eeschema/class_library.cpp                       |   7 +-
 eeschema/class_library.h                         |  13 +-
 eeschema/dialogs/dialog_bom.cpp                  |   8 +-
 eeschema/project_rescue.cpp                      |   2 +-
 eeschema/schframe.h                              |   3 +-
 eeschema/symbol_lib_table.cpp                    |   4 +-
 eeschema/symbol_lib_table.h                      |   8 +-
 eeschema/template_fieldnames.cpp                 |   8 +-
 eeschema/template_fieldnames.h                   |   8 +-
 include/class_board_design_settings.h            |   2 +-
 include/class_page_info.h                        |   3 +-
 include/class_title_block.h                      |   3 +-
 include/dsnlexer.h                               |  26 +--
 include/eda_text.h                               |   3 +-
 include/filter_reader.h                          |   4 +-
 include/fp_lib_table.h                           |   8 +-
 include/frame_type.h                             |   2 +-
 include/lib_id.h                                 |   7 +-
 include/lib_table_base.h                         |   5 +-
 include/ptree.h                                  |   4 +-
 include/richio.h                                 |  31 ++-
 include/wxBasePcbFrame.h                         |   3 +-
 include/wxPcbStruct.h                            |   3 +-
 include/xnode.h                                  |   4 +-
 new/sch_dir_lib_source.cpp                       |  14 +-
 new/sch_dir_lib_source.h                         |  24 +--
 new/sch_lib.cpp                                  |   6 +-
 new/sch_lib.h                                    |  42 ++--
 new/sch_lib_table.cpp                            |  11 +-
 new/sch_lib_table.h                              |  11 +-
 new/sch_part.cpp                                 |  16 --
 new/sch_part.h                                   |  42 ++--
 pagelayout_editor/page_layout_writer.cpp         |  34 +---
 pcb_calculator/datafile_read_write.cpp           |   8 +-
 pcb_calculator/datafile_read_write.h             |  10 +-
 pcbnew/class_netclass.cpp                        |   1 -
 pcbnew/class_netclass.h                          |   3 +-
 pcbnew/github/github_plugin.cpp                  |   2 +-
 pcbnew/github/github_plugin.h                    |   2 +-
 pcbnew/gpcb_plugin.cpp                           |   4 +-
 pcbnew/kicad_netlist_reader.cpp                  |  12 +-
 pcbnew/kicad_plugin.cpp                          |  14 --
 pcbnew/kicad_plugin.h                            |  42 ++--
 pcbnew/legacy_netlist_reader.cpp                 |   7 +-
 pcbnew/loadcmp.cpp                               |   1 -
 pcbnew/netlist.cpp                               |   1 -
 pcbnew/netlist_reader.cpp                        |   3 +-
 pcbnew/netlist_reader.h                          |  27 ++-
 pcbnew/pcb_parser.cpp                            |  66 +++---
 pcbnew/pcb_parser.h                              |  86 ++++----
 pcbnew/pcb_plot_params.cpp                       |   6 +-
 pcbnew/pcb_plot_params.h                         |   5 +-
 pcbnew/pcb_plot_params_parser.h                  |   4 +-
 pcbnew/specctra.cpp                              | 128 ++++++------
 pcbnew/specctra.h                                | 243 +++++++++++------------
 pcbnew/specctra_export.cpp                       |   2 -
 pcbnew/specctra_import.cpp                       |   5 +-
 tools/io_benchmark/stdstream_line_reader.cpp     |   4 +-
 tools/io_benchmark/stdstream_line_reader.h       |   4 +-
 75 files changed, 516 insertions(+), 672 deletions(-)

diff --git a/3d-viewer/3d_math.cpp b/3d-viewer/3d_math.cpp
index f4201ca6d..2f5afd64a 100644
--- a/3d-viewer/3d_math.cpp
+++ b/3d-viewer/3d_math.cpp
@@ -24,7 +24,7 @@
 
 /**
  * @file  3d_math.cpp
- * @brief 
+ * @brief
  */
 
 
diff --git a/AUTHORS.txt b/AUTHORS.txt
index 644540d7d..656723fee 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -40,6 +40,7 @@ Mario Luzeiro <mrluzeiro[at]ua-dot-pt>
 Mateusz Skowroński <skowri[at]gmail-dot-com>
 Cheng Sheng <chengsheng[at]google-dot-com>
 Google Inc.
+Kristoffer Ödmark <kristoffer.odmark90[at]gmail-dot-com>
 See also CHANGELOG.txt for contributors.
 
 
diff --git a/Documentation/development/coding-style-policy.md b/Documentation/development/coding-style-policy.md
index e941db833..82543f618 100644
--- a/Documentation/development/coding-style-policy.md
+++ b/Documentation/development/coding-style-policy.md
@@ -223,7 +223,7 @@ leading sentence in the doxygen html output. The chosen format is
      * @throw IO_ERROR, if there is a problem outputting, such asisk.
      */
     int PRINTF_FUNC Print( int nestLevel,
-        const char* fmt, ... )
+        const char* fmt, ... );
 ~~~~~~~~~~~~~
 
 The “Function \<name\>” text goes on the 2nd line of the comment. The
diff --git a/common/class_page_info.cpp b/common/class_page_info.cpp
index 2cf94d4cc..f8164dfbd 100644
--- a/common/class_page_info.cpp
+++ b/common/class_page_info.cpp
@@ -45,7 +45,7 @@ const wxChar PAGE_INFO::A2[] = wxT( "A2" );
 const wxChar PAGE_INFO::A1[] = wxT( "A1" );
 const wxChar PAGE_INFO::A0[] = wxT( "A0" );
 const wxChar PAGE_INFO::A[]  = wxT( "A" );
-const wxChar PAGE_INFO::B[]  = wxT( "B" ) ;
+const wxChar PAGE_INFO::B[]  = wxT( "B" );
 const wxChar PAGE_INFO::C[]  = wxT( "C" );
 const wxChar PAGE_INFO::D[]  = wxT( "D" );
 const wxChar PAGE_INFO::E[]  = wxT( "E" );
@@ -265,7 +265,6 @@ void PAGE_INFO::SetHeightMils( int aHeightInMils )
 
 
 void PAGE_INFO::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
     aFormatter->Print( aNestLevel, "(page %s", aFormatter->Quotew( GetType() ).c_str() );
 
diff --git a/common/dsnlexer.cpp b/common/dsnlexer.cpp
index e45f6f146..696ebcced 100644
--- a/common/dsnlexer.cpp
+++ b/common/dsnlexer.cpp
@@ -350,7 +350,7 @@ bool DSNLEXER::IsSymbol( int aTok )
 }
 
 
-void DSNLEXER::Expecting( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Expecting( int aTok )
 {
     wxString errText = wxString::Format(
         _("Expecting '%s'"), GetChars( GetTokenString( aTok ) ) );
@@ -358,7 +358,7 @@ void DSNLEXER::Expecting( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Expecting( const char* text ) throw( IO_ERROR )
+void DSNLEXER::Expecting( const char* text )
 {
     wxString errText = wxString::Format(
         _("Expecting '%s'"), GetChars( wxString::FromUTF8( text ) ) );
@@ -366,7 +366,7 @@ void DSNLEXER::Expecting( const char* text ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Unexpected( int aTok )
 {
     wxString errText = wxString::Format(
         _("Unexpected '%s'"), GetChars( GetTokenString( aTok ) ) );
@@ -374,7 +374,7 @@ void DSNLEXER::Unexpected( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Duplicate( int aTok ) throw( IO_ERROR )
+void DSNLEXER::Duplicate( int aTok )
 {
     wxString errText = wxString::Format(
         _("%s is a duplicate"), GetTokenString( aTok ).GetData() );
@@ -382,7 +382,7 @@ void DSNLEXER::Duplicate( int aTok ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::Unexpected( const char* text ) throw( IO_ERROR )
+void DSNLEXER::Unexpected( const char* text )
 {
     wxString errText = wxString::Format(
         _("Unexpected '%s'"), GetChars( wxString::FromUTF8( text ) ) );
@@ -390,7 +390,7 @@ void DSNLEXER::Unexpected( const char* text ) throw( IO_ERROR )
 }
 
 
-void DSNLEXER::NeedLEFT() throw( IO_ERROR )
+void DSNLEXER::NeedLEFT()
 {
     int tok = NextTok();
     if( tok != DSN_LEFT )
@@ -398,7 +398,7 @@ void DSNLEXER::NeedLEFT() throw( IO_ERROR )
 }
 
 
-void DSNLEXER::NeedRIGHT() throw( IO_ERROR )
+void DSNLEXER::NeedRIGHT()
 {
     int tok = NextTok();
     if( tok != DSN_RIGHT )
@@ -406,7 +406,7 @@ void DSNLEXER::NeedRIGHT() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedSYMBOL() throw( IO_ERROR )
+int DSNLEXER::NeedSYMBOL()
 {
     int tok = NextTok();
     if( !IsSymbol( tok ) )
@@ -415,7 +415,7 @@ int DSNLEXER::NeedSYMBOL() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedSYMBOLorNUMBER() throw( IO_ERROR )
+int DSNLEXER::NeedSYMBOLorNUMBER()
 {
     int  tok = NextTok();
     if( !IsSymbol( tok ) && tok!=DSN_NUMBER )
@@ -424,7 +424,7 @@ int DSNLEXER::NeedSYMBOLorNUMBER() throw( IO_ERROR )
 }
 
 
-int DSNLEXER::NeedNUMBER( const char* aExpectation ) throw( IO_ERROR )
+int DSNLEXER::NeedNUMBER( const char* aExpectation )
 {
     int tok = NextTok();
     if( tok != DSN_NUMBER )
@@ -537,7 +537,7 @@ static bool isNumber( const char* cp, const char* limit )
 }
 
 
-int DSNLEXER::NextTok() throw( IO_ERROR )
+int DSNLEXER::NextTok()
 {
     const char*   cur  = next;
     const char*   head = cur;
@@ -808,7 +808,7 @@ exit:   // single point of exit, no returns elsewhere please.
 }
 
 
-wxArrayString* DSNLEXER::ReadCommentLines() throw( IO_ERROR )
+wxArrayString* DSNLEXER::ReadCommentLines()
 {
     wxArrayString*  ret = 0;
     bool            cmt_setting = SetCommentsAreTokens( true );
diff --git a/common/eda_text.cpp b/common/eda_text.cpp
index 70a3ce3a0..e57767543 100644
--- a/common/eda_text.cpp
+++ b/common/eda_text.cpp
@@ -428,7 +428,6 @@ bool EDA_TEXT::IsDefaultFormatting() const
 
 
 void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
 #ifndef GERBVIEW        // Gerbview does not use EDA_TEXT::Format
                         // and does not define FMT_IU, used here
diff --git a/common/filter_reader.cpp b/common/filter_reader.cpp
index 7ab901866..820cc1838 100644
--- a/common/filter_reader.cpp
+++ b/common/filter_reader.cpp
@@ -49,7 +49,7 @@ FILTER_READER::~FILTER_READER()
 }
 
 
-char* FILTER_READER::ReadLine() throw( IO_ERROR )
+char* FILTER_READER::ReadLine()
 {
     char* s;
 
@@ -87,7 +87,7 @@ WHITESPACE_FILTER_READER::~WHITESPACE_FILTER_READER()
 }
 
 
-char* WHITESPACE_FILTER_READER::ReadLine() throw( IO_ERROR )
+char* WHITESPACE_FILTER_READER::ReadLine()
 {
     char* s;
 
diff --git a/common/fp_lib_table.cpp b/common/fp_lib_table.cpp
index a337b0945..358d95ac9 100644
--- a/common/fp_lib_table.cpp
+++ b/common/fp_lib_table.cpp
@@ -215,7 +215,6 @@ void FP_LIB_TABLE::PrefetchLib( const wxString& aNickname )
 
 
 const FP_LIB_TABLE_ROW* FP_LIB_TABLE::FindRow( const wxString& aNickname )
-    throw( IO_ERROR )
 {
     FP_LIB_TABLE_ROW* row = dynamic_cast< FP_LIB_TABLE_ROW* >( findRow( aNickname ) );
 
@@ -329,7 +328,6 @@ void FP_LIB_TABLE::FootprintLibCreate( const wxString& aNickname )
 
 
 MODULE* FP_LIB_TABLE::FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     wxString   nickname = FROM_UTF8( aFootprintId.GetLibNickname() );
     wxString   fpname   = FROM_UTF8( aFootprintId.GetLibItemName() );
@@ -367,7 +365,6 @@ const wxString FP_LIB_TABLE::GlobalPathEnvVariableName()
 
 
 bool FP_LIB_TABLE::LoadGlobalTable( FP_LIB_TABLE& aTable )
-    throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     bool        tableExists = true;
     wxFileName  fn = GetGlobalTableFileName();
diff --git a/common/lib_id.cpp b/common/lib_id.cpp
index 049e8abcd..719426138 100644
--- a/common/lib_id.cpp
+++ b/common/lib_id.cpp
@@ -175,7 +175,7 @@ int LIB_ID::Parse( const UTF8& aId )
 }
 
 
-LIB_ID::LIB_ID( const std::string& aId ) throw( PARSE_ERROR )
+LIB_ID::LIB_ID( const std::string& aId )
 {
     int offset = Parse( aId );
 
@@ -190,7 +190,7 @@ LIB_ID::LIB_ID( const std::string& aId ) throw( PARSE_ERROR )
 }
 
 
-LIB_ID::LIB_ID( const wxString& aId ) throw( PARSE_ERROR )
+LIB_ID::LIB_ID( const wxString& aId )
 {
     UTF8 id = TO_UTF8( aId );
 
@@ -297,7 +297,6 @@ UTF8 LIB_ID::GetLibItemNameAndRev() const
 
 
 UTF8 LIB_ID::Format( const UTF8& aLogicalLib, const UTF8& aLibItemName, const UTF8& aRevision )
-    throw( PARSE_ERROR )
 {
     UTF8    ret;
     int     offset;
diff --git a/common/lib_table_base.cpp b/common/lib_table_base.cpp
index f203fcb9d..b3294a488 100644
--- a/common/lib_table_base.cpp
+++ b/common/lib_table_base.cpp
@@ -357,7 +357,7 @@ bool LIB_TABLE::InsertRow( LIB_TABLE_ROW* aRow, bool doReplace )
 
 
 void LIB_TABLE::Load( const wxString& aFileName )
-    throw( IO_ERROR )
+
 {
     // It's OK if footprint library tables are missing.
     if( wxFileName::IsFileReadable( aFileName ) )
@@ -371,7 +371,6 @@ void LIB_TABLE::Load( const wxString& aFileName )
 
 
 void LIB_TABLE::Save( const wxString& aFileName ) const
-    throw( IO_ERROR, boost::interprocess::lock_exception )
 {
     FILE_OUTPUTFORMATTER sf( aFileName );
     Format( &sf, 0 );
diff --git a/common/page_layout/page_layout_reader.cpp b/common/page_layout/page_layout_reader.cpp
index d3b811f46..c7ce07a22 100644
--- a/common/page_layout/page_layout_reader.cpp
+++ b/common/page_layout/page_layout_reader.cpp
@@ -48,8 +48,7 @@ class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER
 {
 public:
     PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource );
-    void Parse( WORKSHEET_LAYOUT* aLayout )
-                throw( PARSE_ERROR, IO_ERROR );
+    void Parse( WORKSHEET_LAYOUT* aLayout );
 
 private:
 
@@ -69,41 +68,38 @@ private:
      */
     double parseDouble();
 
-    void parseSetup( WORKSHEET_LAYOUT* aLayout ) throw( IO_ERROR, PARSE_ERROR );
+    void parseSetup( WORKSHEET_LAYOUT* aLayout );
 
     /**
      * parse a graphic item starting by "(line" or "(rect" and read parameters.
      */
-    void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseGraphic( WORKSHEET_DATAITEM * aItem );
 
     /**
      * parse a text item starting by "(tbtext" and read parameters.
      */
-    void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseText( WORKSHEET_DATAITEM_TEXT * aItem );
 
     /**
      * parse a polygon item starting by "( polygon" and read parameters.
      * the list of corners included in this description is read by parsePolyOutline
      */
-    void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem );
 
     /**
      * parse a list of corners starting by "( pts" and read coordinates.
      */
-    void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem );
 
 
     /**
      * parse a bitmap item starting by "( bitmap" and read parameters.
      */
-    void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
-        throw( IO_ERROR, PARSE_ERROR );
+    void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem );
 
-    void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR );
-    void readOption( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
-    void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem ) throw( IO_ERROR, PARSE_ERROR );
+    void parseCoordinate( POINT_COORD& aCoord);
+    void readOption( WORKSHEET_DATAITEM * aItem );
+    void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem );
 };
 
 // PCB_PLOT_PARAMS_PARSER
@@ -115,7 +111,6 @@ PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const w
 
 
 void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout )
-                             throw( PARSE_ERROR, IO_ERROR )
 {
     T token;
     WORKSHEET_DATAITEM * item;
@@ -178,7 +173,6 @@ void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout )
 }
 
 void PAGE_LAYOUT_READER_PARSER::parseSetup( WORKSHEET_LAYOUT* aLayout )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     while( ( token = NextTok() ) != T_RIGHT )
@@ -235,7 +229,6 @@ void PAGE_LAYOUT_READER_PARSER::parseSetup( WORKSHEET_LAYOUT* aLayout )
 }
 
 void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -309,7 +302,6 @@ void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * a
 }
 
 void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     DPOINT corner;
     T token;
@@ -340,7 +332,6 @@ void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON
 
 #include <wx/mstream.h>
 void PAGE_LAYOUT_READER_PARSER::parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     BITMAP_BASE* image = new BITMAP_BASE;
@@ -407,7 +398,6 @@ void PAGE_LAYOUT_READER_PARSER::parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
 }
 
 void PAGE_LAYOUT_READER_PARSER::readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem )
-            throw( IO_ERROR, PARSE_ERROR )
 {
     std::string tmp;
     T token;
@@ -448,7 +438,6 @@ void PAGE_LAYOUT_READER_PARSER::readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -476,7 +465,6 @@ void PAGE_LAYOUT_READER_PARSER::readOption( WORKSHEET_DATAITEM * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -552,7 +540,6 @@ void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
 
 
 void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
@@ -703,7 +690,6 @@ void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem )
 
 // parse an expression like " 25 1 ltcorner)"
 void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
 
diff --git a/common/ptree.cpp b/common/ptree.cpp
index bac47eeac..b8c82988c 100644
--- a/common/ptree.cpp
+++ b/common/ptree.cpp
@@ -87,7 +87,7 @@ inline void scanAtom( PTREE* aTree, DSNLEXER* aLexer )
 }
 
 
-void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw( IO_ERROR )
+void Scan( PTREE* aTree, DSNLEXER* aLexer )
 {
     int tok  = aLexer->CurTok();
 
@@ -135,11 +135,11 @@ inline CITER next( CITER it )
 
 
 static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
-        const std::string& aKey, CPTREE& aTree ) throw( IO_ERROR );
+        const std::string& aKey, CPTREE& aTree );
 
 
 static void formatList( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree )
-    throw( IO_ERROR )
+
 {
     for( CITER it = aTree.begin();  it != aTree.end();  ++it )
     {
@@ -170,7 +170,7 @@ static void formatList( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE&
 
 static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
         const std::string& aKey, CPTREE& aTree )
-    throw( IO_ERROR )
+
 {
     if( !isAtom( aTree ) )     // is a list, not an atom
     {
@@ -202,7 +202,7 @@ static void formatNode( OUTPUTFORMATTER* out, int aNestLevel, int aCtl,
 }
 
 
-void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR )
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree )
 {
     if( aTree.size() == 1 && !aTree.data().size() )
     {
diff --git a/common/richio.cpp b/common/richio.cpp
index 200ca8f74..a86348763 100644
--- a/common/richio.cpp
+++ b/common/richio.cpp
@@ -156,7 +156,7 @@ void LINE_READER::expandCapacity( unsigned newsize )
 
 FILE_LINE_READER::FILE_LINE_READER( const wxString& aFileName,
             unsigned aStartingLineNumber,
-            unsigned aMaxLineLength ) throw( IO_ERROR ) :
+            unsigned aMaxLineLength ):
     LINE_READER( aMaxLineLength ),
     iOwn( true )
 {
@@ -193,7 +193,7 @@ FILE_LINE_READER::~FILE_LINE_READER()
 }
 
 
-char* FILE_LINE_READER::ReadLine() throw( IO_ERROR )
+char* FILE_LINE_READER::ReadLine()
 {
     length = 0;
 
@@ -226,7 +226,7 @@ char* FILE_LINE_READER::ReadLine() throw( IO_ERROR )
 }
 
 
-STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxString& aSource ) :
+STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxString& aSource ):
     LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
     lines( aString ),
     ndx( 0 )
@@ -237,7 +237,7 @@ STRING_LINE_READER::STRING_LINE_READER( const std::string& aString, const wxStri
 }
 
 
-STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint ) :
+STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint ):
     LINE_READER( LINE_READER_LINE_DEFAULT_MAX ),
     lines( aStartingPoint.lines ),
     ndx( aStartingPoint.ndx )
@@ -250,7 +250,7 @@ STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint
 }
 
 
-char* STRING_LINE_READER::ReadLine() throw( IO_ERROR )
+char* STRING_LINE_READER::ReadLine()
 {
     size_t  nlOffset = lines.find( '\n', ndx );
 
@@ -290,7 +290,7 @@ INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER( wxInputStream* aStream, const
 }
 
 
-char* INPUTSTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
+char* INPUTSTREAM_LINE_READER::ReadLine()
 {
     length  = 0;
 
@@ -367,7 +367,7 @@ const char* OUTPUTFORMATTER::GetQuoteChar( const char* wrapee )
     return GetQuoteChar( wrapee, quoteChar );
 }
 
-int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )  throw( IO_ERROR )
+int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )
 {
     // This function can call vsnprintf twice.
     // But internally, vsnprintf retrieves arguments from the va_list identified by arg as if
@@ -393,7 +393,7 @@ int OUTPUTFORMATTER::vprint( const char* fmt,  va_list ap )  throw( IO_ERROR )
 }
 
 
-int OUTPUTFORMATTER::sprint( const char* fmt, ... )  throw( IO_ERROR )
+int OUTPUTFORMATTER::sprint( const char* fmt, ... )
 {
     va_list     args;
 
@@ -405,7 +405,7 @@ int OUTPUTFORMATTER::sprint( const char* fmt, ... )  throw( IO_ERROR )
 }
 
 
-int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR )
+int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... )
 {
 #define NESTWIDTH           2   ///< how many spaces per nestLevel
 
@@ -434,7 +434,7 @@ int OUTPUTFORMATTER::Print( int nestLevel, const char* fmt, ... ) throw( IO_ERRO
 }
 
 
-std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee ) throw( IO_ERROR )
+std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee )
 {
     static const char quoteThese[] = "\t ()\n\r";
 
@@ -483,7 +483,7 @@ std::string OUTPUTFORMATTER::Quotes( const std::string& aWrapee ) throw( IO_ERRO
 }
 
 
-std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee ) throw( IO_ERROR )
+std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee )
 {
     // wxStrings are always encoded as UTF-8 as we convert to a byte sequence.
     // The non-virutal function calls the virtual workhorse function, and if
@@ -496,7 +496,7 @@ std::string OUTPUTFORMATTER::Quotew( const wxString& aWrapee ) throw( IO_ERROR )
 
 //-----<STRING_FORMATTER>----------------------------------------------------
 
-void STRING_FORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void STRING_FORMATTER::write( const char* aOutBuf, int aCount )
 {
     mystring.append( aOutBuf, aCount );
 }
@@ -519,7 +519,7 @@ void STRING_FORMATTER::StripUseless()
 //-----<FILE_OUTPUTFORMATTER>----------------------------------------
 
 FILE_OUTPUTFORMATTER::FILE_OUTPUTFORMATTER( const wxString& aFileName,
-        const wxChar* aMode,  char aQuoteChar ) throw( IO_ERROR ) :
+        const wxChar* aMode,  char aQuoteChar ):
     OUTPUTFORMATTER( OUTPUTFMTBUFZ, aQuoteChar ),
     m_filename( aFileName )
 {
@@ -542,7 +542,7 @@ FILE_OUTPUTFORMATTER::~FILE_OUTPUTFORMATTER()
 }
 
 
-void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
 {
     if( 1 != fwrite( aOutBuf, aCount, 1, m_fp ) )
     {
@@ -556,7 +556,7 @@ void FILE_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ER
 
 //-----<STREAM_OUTPUTFORMATTER>--------------------------------------
 
-void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount ) throw( IO_ERROR )
+void STREAM_OUTPUTFORMATTER::write( const char* aOutBuf, int aCount )
 {
     int lastWrite;
 
diff --git a/common/worksheet.cpp b/common/worksheet.cpp
index 4cff42e31..ea01e4787 100644
--- a/common/worksheet.cpp
+++ b/common/worksheet.cpp
@@ -243,7 +243,7 @@ wxString WS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
 
 
 void TITLE_BLOCK::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
+
 {
     // Don't write the title block information if there is nothing to write.
     bool isempty = true;
diff --git a/common/xnode.cpp b/common/xnode.cpp
index 7419f23ca..74d31be9b 100644
--- a/common/xnode.cpp
+++ b/common/xnode.cpp
@@ -29,7 +29,7 @@
 typedef wxXmlAttribute   XATTR;
 
 
-void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     switch( GetType() )
     {
@@ -48,7 +48,7 @@ void XNODE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
 }
 
 
-void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void XNODE::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     // output attributes first if they exist
     for( XATTR* attr = (XATTR*) GetAttributes();  attr;  attr = (XATTR*) attr->GetNext() )
diff --git a/eeschema/backanno.cpp b/eeschema/backanno.cpp
index 2b23162b4..7a745ba6f 100644
--- a/eeschema/backanno.cpp
+++ b/eeschema/backanno.cpp
@@ -49,7 +49,6 @@
 
 
 void SCH_EDIT_FRAME::backAnnotateFootprints( const std::string& aChangedSetOfReferences )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     // Build a flat list of components in schematic:
     SCH_REFERENCE_LIST  refs;
diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp
index 55f9fcefa..6e3766929 100644
--- a/eeschema/class_library.cpp
+++ b/eeschema/class_library.cpp
@@ -283,7 +283,7 @@ LIB_PART* PART_LIB::ReplacePart( LIB_PART* aOldPart, LIB_PART* aNewPart )
 }
 
 
-PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer )
+PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName )
 {
     std::unique_ptr<PART_LIB> lib( new PART_LIB( LIBRARY_TYPE_EESCHEMA, aFileName ) );
 
@@ -307,7 +307,7 @@ PART_LIB* PART_LIB::LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, bo
 }
 
 
-PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer )
+PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName )
 {
     PART_LIB* lib;
 
@@ -327,7 +327,6 @@ PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName ) throw( IO_ERROR, bo
 
 
 PART_LIB* PART_LIBS::AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     // Don't reload the library if it is already loaded.
     wxFileName fn( aFileName );
@@ -479,7 +478,6 @@ int PART_LIBS::GetModifyHash()
 
 void PART_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave,
                                   wxString* aPaths, wxArrayString* aNames )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString pro = aProject->GetProjectFullName();
 
@@ -548,7 +546,6 @@ const wxString PART_LIBS::CacheName( const wxString& aFullProjectFilename )
 
 
 void PART_LIBS::LoadAllLibraries( PROJECT* aProject, bool aShowProgress )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString        filename;
     wxString        libs_not_found;
diff --git a/eeschema/class_library.h b/eeschema/class_library.h
index 52587b9f6..74fe0e91e 100644
--- a/eeschema/class_library.h
+++ b/eeschema/class_library.h
@@ -211,7 +211,7 @@ public:
      * @param aFileName - File name object of part library.
      * @throw IO_ERROR if there's any problem loading.
      */
-    PART_LIB* AddLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer );
+    PART_LIB* AddLibrary( const wxString& aFileName );
 
     /**
      * Function AddLibrary
@@ -222,16 +222,14 @@ public:
      * @return PART_LIB* - the new PART_LIB, which remains owned by this PART_LIBS container.
      * @throw IO_ERROR if there's any problem loading.
      */
-    PART_LIB* AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator )
-        throw( IO_ERROR, boost::bad_pointer );
+    PART_LIB* AddLibrary( const wxString& aFileName, PART_LIBS::iterator& aIterator );
 
     /**
      * Function LoadAllLibraries
      * loads all of the project's libraries into this container, which should
      * be cleared before calling it.
      */
-    void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true )
-        throw( IO_ERROR, boost::bad_pointer );
+    void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true );
 
     /**
      * Function LibNamesAndPaths
@@ -239,8 +237,7 @@ public:
      * (without paths).
      */
     static void LibNamesAndPaths( PROJECT* aProject, bool doSave,
-                                  wxString* aPaths, wxArrayString* aNames=NULL )
-        throw( IO_ERROR, boost::bad_pointer );
+                                  wxString* aPaths, wxArrayString* aNames=NULL );
 
     /**
      * Function cacheName
@@ -509,7 +506,7 @@ public:
      *   the caller.
      * @throw IO_ERROR if there's any problem loading the library.
      */
-    static PART_LIB* LoadLibrary( const wxString& aFileName ) throw( IO_ERROR, boost::bad_pointer );
+    static PART_LIB* LoadLibrary( const wxString& aFileName );
 
     /**
      * Function HasPowerParts
diff --git a/eeschema/dialogs/dialog_bom.cpp b/eeschema/dialogs/dialog_bom.cpp
index 4fcc81d15..d9dc817ac 100644
--- a/eeschema/dialogs/dialog_bom.cpp
+++ b/eeschema/dialogs/dialog_bom.cpp
@@ -86,10 +86,10 @@ class BOM_CFG_READER_PARSER : public DIALOG_BOM_CFG_LEXER
 public:
     BOM_CFG_READER_PARSER( BOM_PLUGIN_ARRAY* aPlugins,
                            const char* aData, const wxString& aSource );
-    void Parse() throw( PARSE_ERROR, IO_ERROR );
+    void Parse();
 
 private:
-    void parsePlugin() throw( IO_ERROR, PARSE_ERROR );
+    void parsePlugin();
 };
 
 // PCB_PLOT_PARAMS_PARSER
@@ -103,7 +103,7 @@ BOM_CFG_READER_PARSER::BOM_CFG_READER_PARSER(  BOM_PLUGIN_ARRAY* aPlugins,
 }
 
 
-void BOM_CFG_READER_PARSER::Parse() throw( PARSE_ERROR, IO_ERROR )
+void BOM_CFG_READER_PARSER::Parse()
 {
     T token;
 
@@ -131,7 +131,7 @@ void BOM_CFG_READER_PARSER::Parse() throw( PARSE_ERROR, IO_ERROR )
     }
 }
 
-void BOM_CFG_READER_PARSER::parsePlugin() throw( IO_ERROR, PARSE_ERROR )
+void BOM_CFG_READER_PARSER::parsePlugin()
 {
     BOM_PLUGIN plugin;
 
diff --git a/eeschema/project_rescue.cpp b/eeschema/project_rescue.cpp
index f1951a14c..460794789 100644
--- a/eeschema/project_rescue.cpp
+++ b/eeschema/project_rescue.cpp
@@ -75,7 +75,7 @@ static bool save_library( PART_LIB* aLibrary, SCH_EDIT_FRAME* aEditFrame )
  *
  * @return true on success, false on failure
  */
-static bool insert_library( PROJECT *aProject, PART_LIB *aLibrary, size_t aIndex ) throw( boost::bad_pointer )
+static bool insert_library( PROJECT *aProject, PART_LIB *aLibrary, size_t aIndex )
 {
     wxArrayString libNames;
     wxString libPaths;
diff --git a/eeschema/schframe.h b/eeschema/schframe.h
index b2d8783c5..7060aae62 100644
--- a/eeschema/schframe.h
+++ b/eeschema/schframe.h
@@ -212,8 +212,7 @@ protected:
 
     void updateFindReplaceView( wxFindDialogEvent& aEvent );
 
-    void backAnnotateFootprints( const std::string& aChangedSetOfReferences )
-        throw( IO_ERROR, boost::bad_pointer );
+    void backAnnotateFootprints( const std::string& aChangedSetOfReferences );
 
     /**
      * Function prepareForNetlist
diff --git a/eeschema/symbol_lib_table.cpp b/eeschema/symbol_lib_table.cpp
index 02c1ff1a9..5ed55651e 100644
--- a/eeschema/symbol_lib_table.cpp
+++ b/eeschema/symbol_lib_table.cpp
@@ -216,7 +216,7 @@ void SYMBOL_LIB_TABLE::EnumerateSymbolLib( const wxString& aNickname, wxArrayStr
 
 
 const SYMBOL_LIB_TABLE_ROW* SYMBOL_LIB_TABLE::FindRow( const wxString& aNickname )
-    throw( IO_ERROR )
+
 {
     SYMBOL_LIB_TABLE_ROW* row = dynamic_cast< SYMBOL_LIB_TABLE_ROW* >( findRow( aNickname ) );
 
@@ -340,7 +340,6 @@ void SYMBOL_LIB_TABLE::CreateSymbolLib( const wxString& aNickname )
 
 
 LIB_ALIAS* SYMBOL_LIB_TABLE::LoadSymbolWithOptionalNickname( const LIB_ID& aLibId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     wxString   nickname = FROM_UTF8( aLibId.GetLibNickname() );
     wxString   name     = FROM_UTF8( aLibId.GetLibItemName() );
@@ -378,7 +377,6 @@ const wxString SYMBOL_LIB_TABLE::GlobalPathEnvVariableName()
 
 
 bool SYMBOL_LIB_TABLE::LoadGlobalTable( SYMBOL_LIB_TABLE& aTable )
-    throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     bool        tableExists = true;
     wxFileName  fn = GetGlobalTableFileName();
diff --git a/eeschema/symbol_lib_table.h b/eeschema/symbol_lib_table.h
index 88dd603fb..59410067a 100644
--- a/eeschema/symbol_lib_table.h
+++ b/eeschema/symbol_lib_table.h
@@ -127,7 +127,7 @@ public:
      *
      * @throw IO_ERROR if \a aNickName cannot be found.
      */
-    const SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
+    const SYMBOL_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
 
     //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
 
@@ -254,8 +254,7 @@ public:
      *                   is thrown in the case where aId cannot be found.
      * @throw   PARSE_ERROR if @a atId is not parsed OK.
      */
-    LIB_ALIAS* LoadSymbolWithOptionalNickname( const LIB_ID& aId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    LIB_ALIAS* LoadSymbolWithOptionalNickname( const LIB_ID& aId );
 
     /**
      * Function LoadGlobalTable
@@ -270,8 +269,7 @@ public:
      * @return true if the global library table exists and is loaded properly.
      * @throw IO_ERROR if an error occurs attempting to load the symbol library table.
      */
-    static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable )
-        throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    static bool LoadGlobalTable( SYMBOL_LIB_TABLE& aTable );
 
     /**
      * Function GetGlobalTableFileName
diff --git a/eeschema/template_fieldnames.cpp b/eeschema/template_fieldnames.cpp
index 28be5dd30..01fbaec35 100644
--- a/eeschema/template_fieldnames.cpp
+++ b/eeschema/template_fieldnames.cpp
@@ -57,7 +57,7 @@ const wxString TEMPLATE_FIELDNAME::GetDefaultFieldName( int aFieldNdx )
     return fieldName;
 }
 
-void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 {
     out->Print( nestLevel, "(field (name %s)",  out->Quotew( m_Name ).c_str() );
 
@@ -71,7 +71,7 @@ void TEMPLATE_FIELDNAME::Format( OUTPUTFORMATTER* out, int nestLevel ) const thr
 }
 
 
-void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR )
+void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in )
 {
     T    tok;
 
@@ -112,7 +112,7 @@ void TEMPLATE_FIELDNAME::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR
 }
 
 
-void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 {
     // We'll keep this general, and include the \n, even though the only known
     // use at this time will not want the newlines or the indentation.
@@ -125,7 +125,7 @@ void TEMPLATES::Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ER
 }
 
 
-void TEMPLATES::Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR )
+void TEMPLATES::Parse( TEMPLATE_FIELDNAMES_LEXER* in )
 {
     T  tok;
 
diff --git a/eeschema/template_fieldnames.h b/eeschema/template_fieldnames.h
index 130ab1471..ab76a3f05 100644
--- a/eeschema/template_fieldnames.h
+++ b/eeschema/template_fieldnames.h
@@ -97,7 +97,7 @@ struct TEMPLATE_FIELDNAME
      * Function Format
      * serializes this object out as text into the given OUTPUTFORMATTER.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const ;
 
     /**
      * Function Parse
@@ -112,7 +112,7 @@ struct TEMPLATE_FIELDNAME
      *
      * @param aSpec is the input token stream of keywords and symbols.
      */
-    void Parse( TEMPLATE_FIELDNAMES_LEXER* aSpec ) throw( IO_ERROR );
+    void Parse( TEMPLATE_FIELDNAMES_LEXER* aSpec );
 
     /**
      * Function GetDefaultFieldName
@@ -137,13 +137,13 @@ public:
      * Function Format
      * serializes this object out as text into the given OUTPUTFORMATTER.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const ;
 
     /**
      * Function Parse
      * fills this object from information in the input stream handled by TEMPLATE_FIELDNAMES_LEXER
      */
-    void Parse( TEMPLATE_FIELDNAMES_LEXER* in ) throw( IO_ERROR );
+    void Parse( TEMPLATE_FIELDNAMES_LEXER* in );
 
 
     /**
diff --git a/include/class_board_design_settings.h b/include/class_board_design_settings.h
index a55d988a6..785c04ac0 100644
--- a/include/class_board_design_settings.h
+++ b/include/class_board_design_settings.h
@@ -560,7 +560,7 @@ public:
 
 private:
     void formatNetClass( NETCLASS* aNetClass, OUTPUTFORMATTER* aFormatter, int aNestLevel,
-                         int aControlBits ) const throw( IO_ERROR );
+                         int aControlBits ) const;
 };
 
 #endif  // BOARD_DESIGN_SETTINGS_H_
diff --git a/include/class_page_info.h b/include/class_page_info.h
index a9896f6c6..51383879c 100644
--- a/include/class_page_info.h
+++ b/include/class_page_info.h
@@ -185,8 +185,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 protected:
     // only the class implementation(s) may use this constructor
diff --git a/include/class_title_block.h b/include/class_title_block.h
index 78f2459ab..3fecebea9 100644
--- a/include/class_title_block.h
+++ b/include/class_title_block.h
@@ -137,8 +137,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 private:
     wxArrayString m_tbTexts;
diff --git a/include/dsnlexer.h b/include/dsnlexer.h
index ded81c755..1dc3f8ebd 100644
--- a/include/dsnlexer.h
+++ b/include/dsnlexer.h
@@ -114,7 +114,7 @@ protected:
 
     void init();
 
-    int readLine() throw( IO_ERROR )
+    int readLine()
     {
         if( reader )
         {
@@ -282,7 +282,7 @@ public:
      * @return int - the type of token found next.
      * @throw IO_ERROR - only if the LINE_READER throws it.
      */
-    int NextTok() throw( IO_ERROR );
+    int NextTok();
 
     /**
      * Function NeedSYMBOL
@@ -292,7 +292,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
      */
-    int NeedSYMBOL() throw( IO_ERROR );
+    int NeedSYMBOL();
 
     /**
      * Function NeedSYMBOLorNUMBER
@@ -302,7 +302,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy the above test
      */
-    int NeedSYMBOLorNUMBER() throw( IO_ERROR );
+    int NeedSYMBOLorNUMBER();
 
     /**
      * Function NeedNUMBER
@@ -311,7 +311,7 @@ public:
      * @return int - the actual token read in.
      * @throw IO_ERROR, if the next token does not satisfy the above test
      */
-    int NeedNUMBER( const char* aExpectation ) throw( IO_ERROR );
+    int NeedNUMBER( const char* aExpectation );
 
     /**
      * Function CurTok
@@ -387,7 +387,7 @@ public:
      * @return wxArrayString* - heap allocated block of comments, or NULL if none;
      *   caller owns the allocation and must delete if not NULL.
      */
-    wxArrayString* ReadCommentLines() throw( IO_ERROR );
+    wxArrayString* ReadCommentLines();
 
     /**
      * Function IsSymbol
@@ -403,7 +403,7 @@ public:
      * @param aTok is the token/keyword type which was expected at the current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Expecting( int aTok ) throw( IO_ERROR );
+    void Expecting( int aTok );
 
     /**
      * Function Expecting
@@ -412,7 +412,7 @@ public:
      *         current input location, e.g.  "pin|graphic|property"
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Expecting( const char* aTokenList ) throw( IO_ERROR );
+    void Expecting( const char* aTokenList );
 
     /**
      * Function Unexpected
@@ -421,7 +421,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Unexpected( int aTok ) throw( IO_ERROR );
+    void Unexpected( int aTok );
 
     /**
      * Function Unexpected
@@ -430,7 +430,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Unexpected( const char* aToken ) throw( IO_ERROR );
+    void Unexpected( const char* aToken );
 
     /**
      * Function Duplicate
@@ -440,7 +440,7 @@ public:
      *         current input location.
      * @throw IO_ERROR with the location within the input file of the problem.
      */
-    void Duplicate( int aTok ) throw( IO_ERROR );
+    void Duplicate( int aTok );
 
     /**
      * Function NeedLEFT
@@ -448,7 +448,7 @@ public:
      * If it is not, an IO_ERROR is thrown.
      * @throw IO_ERROR, if the next token is not a DSN_LEFT
      */
-    void NeedLEFT() throw( IO_ERROR );
+    void NeedLEFT();
 
     /**
      * Function NeedRIGHT
@@ -456,7 +456,7 @@ public:
      * If it is not, an IO_ERROR is thrown.
      * @throw IO_ERROR, if the next token is not a DSN_RIGHT
      */
-    void NeedRIGHT() throw( IO_ERROR );
+    void NeedRIGHT();
 
     /**
      * Function GetTokenText
diff --git a/include/eda_text.h b/include/eda_text.h
index e0bbf594e..f4fd59c59 100644
--- a/include/eda_text.h
+++ b/include/eda_text.h
@@ -341,8 +341,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 protected:
     wxString    m_Text;
diff --git a/include/filter_reader.h b/include/filter_reader.h
index 8d9496950..1fcfef6f2 100644
--- a/include/filter_reader.h
+++ b/include/filter_reader.h
@@ -48,7 +48,7 @@ public:
 
     ~FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     const wxString& GetSource() const override
     {
@@ -82,7 +82,7 @@ public:
 
     ~WHITESPACE_FILTER_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     const wxString& GetSource() const override
     {
diff --git a/include/fp_lib_table.h b/include/fp_lib_table.h
index 0022e1d46..385a2d028 100644
--- a/include/fp_lib_table.h
+++ b/include/fp_lib_table.h
@@ -131,7 +131,7 @@ public:
      *
      * @throw IO_ERROR if \a aNickName cannot be found.
      */
-    const FP_LIB_TABLE_ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
+    const FP_LIB_TABLE_ROW* FindRow( const wxString& aNickName );
 
     //-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
 
@@ -249,8 +249,7 @@ public:
      *          is thrown in the case where aFootprintName cannot be found.
      * @throw   PARSE_ERROR if @a aFootprintId is not parsed OK.
      */
-    MODULE* FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    MODULE* FootprintLoadWithOptionalNickname( const LIB_ID& aFootprintId );
 
     /**
      * Function LoadGlobalTable
@@ -265,8 +264,7 @@ public:
      * @throw IO_ERROR if an error occurs attempting to load the footprint library
      *                 table.
      */
-    static bool LoadGlobalTable( FP_LIB_TABLE& aTable )
-        throw (IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    static bool LoadGlobalTable( FP_LIB_TABLE& aTable );
 
     /**
      * Function GetGlobalTableFileName
diff --git a/include/frame_type.h b/include/frame_type.h
index 92bba7427..f54d4f356 100644
--- a/include/frame_type.h
+++ b/include/frame_type.h
@@ -38,7 +38,7 @@ enum FRAME_T
     FRAME_SCH_VIEWER,
     FRAME_SCH_VIEWER_MODAL,
     FRAME_SIMULATOR,
-    
+
     FRAME_PCB,
     FRAME_PCB_MODULE_EDITOR,
     FRAME_PCB_MODULE_VIEWER,
diff --git a/include/lib_id.h b/include/lib_id.h
index 7967d0a49..a6aabc7fd 100644
--- a/include/lib_id.h
+++ b/include/lib_id.h
@@ -70,9 +70,9 @@ public:
      *
      * @param aId is a string to be parsed into the LIB_ID object.
      */
-    LIB_ID( const std::string& aId ) throw( PARSE_ERROR );
+    LIB_ID( const std::string& aId );
 
-    LIB_ID( const wxString& aId ) throw( PARSE_ERROR );
+    LIB_ID( const wxString& aId );
 
     /**
      * This LIB_ID ctor is a special version which ignores the parsing due to symbol
@@ -161,8 +161,7 @@ public:
      * @throw PARSE_ERROR if any of the pieces are illegal.
      */
     static UTF8 Format( const UTF8& aLibNickname, const UTF8& aLibItemName,
-                        const UTF8& aRevision = "" )
-        throw( PARSE_ERROR );
+                        const UTF8& aRevision = "" );
 
     /**
      * Function IsValid
diff --git a/include/lib_table_base.h b/include/lib_table_base.h
index c0466147e..7e2c0f9b2 100644
--- a/include/lib_table_base.h
+++ b/include/lib_table_base.h
@@ -415,7 +415,7 @@ public:
      * @throw IO_ERROR if an error occurs attempting to load the footprint library
      *                 table.
      */
-    void Load( const wxString& aFileName ) throw( IO_ERROR );
+    void Load( const wxString& aFileName );
 
     /**
      * Function Save
@@ -424,8 +424,7 @@ public:
      *
      * @param aFileName is the name of the file to write to.
      */
-    void Save( const wxString& aFileName ) const
-        throw( IO_ERROR, boost::interprocess::lock_exception );
+    void Save( const wxString& aFileName ) const;
 
     /**
      * Search the paths all of the #LIB_TABLE_ROWS of the #LIB_TABLE and add all of the
diff --git a/include/ptree.h b/include/ptree.h
index 684becc7f..494b216c5 100644
--- a/include/ptree.h
+++ b/include/ptree.h
@@ -84,12 +84,12 @@ typedef boost::property_tree::ptree_error   PTREE_ERROR;
  *
  * </code>
  */
-void Scan( PTREE* aTree, DSNLEXER* aLexer ) throw ( IO_ERROR );
+void Scan( PTREE* aTree, DSNLEXER* aLexer );
 
 /**
  * Function Format
  * outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
  */
-void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree ) throw( IO_ERROR );
+void Format( OUTPUTFORMATTER* out, int aNestLevel, int aCtl, CPTREE& aTree );
 
 #endif  // PTREE_H_
diff --git a/include/richio.h b/include/richio.h
index 0e4900c20..0d35c8c73 100644
--- a/include/richio.h
+++ b/include/richio.h
@@ -118,7 +118,7 @@ public:
      * @return char* - The beginning of the read line, or NULL if EOF.
      * @throw IO_ERROR when a line is too long.
      */
-    virtual char* ReadLine() throw( IO_ERROR ) = 0;
+    virtual char* ReadLine() = 0;
 
     /**
      * Function GetSource
@@ -205,7 +205,7 @@ public:
      */
     FILE_LINE_READER( const wxString& aFileName,
             unsigned aStartingLineNumber = 0,
-            unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX ) throw( IO_ERROR );
+            unsigned aMaxLineLength = LINE_READER_LINE_DEFAULT_MAX );
 
     /**
      * Constructor FILE_LINE_READER
@@ -232,7 +232,7 @@ public:
      */
     ~FILE_LINE_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 
     /**
      * Function Rewind
@@ -279,7 +279,7 @@ public:
      */
     STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint );
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 };
 
 
@@ -302,7 +302,7 @@ public:
      */
     INPUTSTREAM_LINE_READER( wxInputStream* aStream, const wxString& aSource );
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine() override;
 };
 
 
@@ -329,8 +329,8 @@ class OUTPUTFORMATTER
     std::vector<char>   buffer;
     char                quoteChar[2];
 
-    int sprint( const char* fmt, ... )  throw( IO_ERROR );
-    int vprint( const char* fmt,  va_list ap )  throw( IO_ERROR );
+    int sprint( const char* fmt, ... );
+    int vprint( const char* fmt,  va_list ap );
 
 
 protected:
@@ -365,7 +365,7 @@ protected:
      * @param aCount  tells how many bytes to write.
      * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
      */
-    virtual void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) = 0;
+    virtual void write( const char* aOutBuf, int aCount ) = 0;
 
 #if defined(__GNUG__)   // The GNU C++ compiler defines this
 
@@ -394,7 +394,7 @@ public:
      * @return int - the number of characters output.
      * @throw IO_ERROR, if there is a problem outputting, such as a full disk.
      */
-    int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... ) throw( IO_ERROR );
+    int PRINTF_FUNC Print( int nestLevel, const char* fmt, ... );
 
     /**
      * Function GetQuoteChar
@@ -429,9 +429,9 @@ public:
      *
      * @throw IO_ERROR, if there is any kind of problem with the input string.
      */
-     virtual std::string Quotes( const std::string& aWrapee ) throw( IO_ERROR );
+     virtual std::string Quotes( const std::string& aWrapee );
 
-     std::string Quotew( const wxString& aWrapee ) throw( IO_ERROR );
+     std::string Quotew( const wxString& aWrapee );
 
     //-----</interface functions>-----------------------------------------
 };
@@ -479,7 +479,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
@@ -504,14 +504,13 @@ public:
      */
     FILE_OUTPUTFORMATTER(   const wxString& aFileName,
                             const wxChar* aMode = wxT( "wt" ),
-                            char aQuoteChar = '"' )
-        throw( IO_ERROR );
+                            char aQuoteChar = '"' );
 
     ~FILE_OUTPUTFORMATTER();
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 
     FILE*       m_fp;               ///< takes ownership
@@ -542,7 +541,7 @@ public:
 
 protected:
     //-----<OUTPUTFORMATTER>------------------------------------------------
-    void write( const char* aOutBuf, int aCount ) throw( IO_ERROR ) override;
+    void write( const char* aOutBuf, int aCount ) override;
     //-----</OUTPUTFORMATTER>-----------------------------------------------
 };
 
diff --git a/include/wxBasePcbFrame.h b/include/wxBasePcbFrame.h
index d86a2455a..5bd389a05 100644
--- a/include/wxBasePcbFrame.h
+++ b/include/wxBasePcbFrame.h
@@ -95,8 +95,7 @@ protected:
      * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
      *                 occurs while reading footprint library files.
      */
-    MODULE* loadFootprint( const LIB_ID& aFootprintId )
-        throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception );
+    MODULE* loadFootprint( const LIB_ID& aFootprintId );
 
 public:
     PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h
index bcd56f9cd..91efde8a3 100644
--- a/include/wxPcbStruct.h
+++ b/include/wxPcbStruct.h
@@ -253,8 +253,7 @@ public:
      * @throw IO_ERROR if an I/O error occurs or a #PARSE_ERROR if a file parsing error
      *           occurs while reading footprint library files.
      */
-    void LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
-        throw( IO_ERROR, PARSE_ERROR );
+    void LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter );
 
     void OnQuit( wxCommandEvent& event );
 
diff --git a/include/xnode.h b/include/xnode.h
index 59cc6501f..fce88e3a6 100644
--- a/include/xnode.h
+++ b/include/xnode.h
@@ -83,7 +83,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel );
 
     /**
      * Function FormatContents
@@ -93,7 +93,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel );
 
 };
 
diff --git a/new/sch_dir_lib_source.cpp b/new/sch_dir_lib_source.cpp
index c91e1b5bc..4d422a535 100644
--- a/new/sch_dir_lib_source.cpp
+++ b/new/sch_dir_lib_source.cpp
@@ -288,7 +288,7 @@ STRING DIR_LIB_SOURCE::makeFileName( const STRING& aPartName )
 }
 
 
-void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName )
 {
     FILE_WRAP   fw = open( aFileName.c_str(), O_RDONLY );
 
@@ -350,7 +350,7 @@ void DIR_LIB_SOURCE::readString( STRING* aResult, const STRING& aFileName ) thro
 }
 
 
-void DIR_LIB_SOURCE::cache() throw( IO_ERROR )
+void DIR_LIB_SOURCE::cache()
 {
     partnames.clear();
     categories.clear();
@@ -360,7 +360,7 @@ void DIR_LIB_SOURCE::cache() throw( IO_ERROR )
 
 
 DIR_LIB_SOURCE::DIR_LIB_SOURCE( const STRING& aDirectoryPath,
-                                const STRING& aOptions ) throw( IO_ERROR ) :
+                                const STRING& aOptions )  :
     useVersioning( strstr( aOptions.c_str(), "useVersioning" ) )
 {
     sourceURI     = aDirectoryPath;
@@ -385,7 +385,6 @@ DIR_LIB_SOURCE::~DIR_LIB_SOURCE()
 
 
 void DIR_LIB_SOURCE::GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory )
-    throw( IO_ERROR )
 {
     PN_ITER end = aCategory.size() ?
                         partnames.lower_bound( aCategory + char( '/' + 1 ) ) :
@@ -428,7 +427,6 @@ void DIR_LIB_SOURCE::GetCategoricalPartNames( STRINGS* aResults, const STRING& a
 
 
 void DIR_LIB_SOURCE::GetRevisions( STRINGS* aResults, const STRING& aPartName )
-    throw( IO_ERROR )
 {
     aResults->clear();
 
@@ -466,7 +464,6 @@ void DIR_LIB_SOURCE::GetRevisions( STRINGS* aResults, const STRING& aPartName )
 
 
 void DIR_LIB_SOURCE::ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev )
-    throw( IO_ERROR )
 {
     STRING      partName = aPartName;
     const char* hasRev   = endsWithRev( partName );
@@ -551,7 +548,6 @@ void DIR_LIB_SOURCE::ReadPart( STRING* aResult, const STRING& aPartName, const S
 
 
 void DIR_LIB_SOURCE::ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
-    throw( IO_ERROR )
 {
     aResults->clear();
 
@@ -563,7 +559,7 @@ void DIR_LIB_SOURCE::ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
 }
 
 
-void DIR_LIB_SOURCE::GetCategories( STRINGS* aResults ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::GetCategories( STRINGS* aResults )
 {
     aResults->clear();
 
@@ -594,7 +590,7 @@ void DIR_LIB_SOURCE::Show()
 #endif
 
 
-void DIR_LIB_SOURCE::cacheOneDir( const STRING& aCategory ) throw( IO_ERROR )
+void DIR_LIB_SOURCE::cacheOneDir( const STRING& aCategory )
 {
     STRING      curDir = sourceURI;
 
diff --git a/new/sch_dir_lib_source.h b/new/sch_dir_lib_source.h
index 9d39352f9..b5a172c52 100644
--- a/new/sch_dir_lib_source.h
+++ b/new/sch_dir_lib_source.h
@@ -95,7 +95,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * Function cache
      * [re-]loads the directory cache(s).
      */
-    void cache() throw( IO_ERROR );
+    void cache();
 
     /**
      * Function isCategoryName
@@ -121,7 +121,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * Function readString
      * reads a Sweet string into aResult.  Candidate for virtual function later.
      */
-    void readString( STRING* aResult, const STRING& aFileName ) throw( IO_ERROR );
+    void readString( STRING* aResult, const STRING& aFileName );
 
     /**
      * Function cacheOneDir
@@ -131,7 +131,7 @@ class DIR_LIB_SOURCE : public LIB_SOURCE
      * only one level of categories is supported.  We know we are in the
      * top most directory if aCategory is empty.
      */
-    void cacheOneDir( const STRING& aCategory ) throw( IO_ERROR );
+    void cacheOneDir( const STRING& aCategory );
 
     /**
      * Function makeFileName
@@ -157,27 +157,23 @@ protected:
      *  tree, otherwise only a single version of each part is recognized, namely the
      *  one without the ".revN[N..]" trailer.
      */
-    DIR_LIB_SOURCE( const STRING& aDirectoryPath, const STRING& aOptions = "" ) throw( IO_ERROR );
+    DIR_LIB_SOURCE( const STRING& aDirectoryPath, const STRING& aOptions = "" );
 
     ~DIR_LIB_SOURCE();
 
     //-----<LIB_SOURCE implementation functions >------------------------------
 
-    void ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev = "" )
-        throw( IO_ERROR );
+    void ReadPart( STRING* aResult, const STRING& aPartName, const STRING& aRev = "" );
 
-    void ReadParts( STRINGS* aResults, const STRINGS& aPartNames )
-        throw( IO_ERROR );
+    void ReadParts( STRINGS* aResults, const STRINGS& aPartNames );
 
-    void GetCategories( STRINGS* aResults ) throw( IO_ERROR );
+    void GetCategories( STRINGS* aResults );
 
-    void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory = "" )
-        throw( IO_ERROR );
+    void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory = "" );
 
-    void GetRevisions( STRINGS* aResults, const STRING& aPartName )
-        throw( IO_ERROR );
+    void GetRevisions( STRINGS* aResults, const STRING& aPartName );
 
-    void FindParts( STRINGS* aResults, const STRING& aQuery ) throw( IO_ERROR )
+    void FindParts( STRINGS* aResults, const STRING& aQuery )
     {
         // @todo
     }
diff --git a/new/sch_lib.cpp b/new/sch_lib.cpp
index a5464fa5d..5595a34e9 100644
--- a/new/sch_lib.cpp
+++ b/new/sch_lib.cpp
@@ -155,7 +155,7 @@ LIB::~LIB()
 }
 
 
-const PART* LIB::lookupPart( const LPID& aLPID ) throw( IO_ERROR )
+const PART* LIB::lookupPart( const LPID& aLPID )
 {
     if( !parts )
     {
@@ -228,7 +228,7 @@ const PART* LIB::lookupPart( const LPID& aLPID ) throw( IO_ERROR )
 }
 
 
-PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable ) throw( IO_ERROR )
+PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable )
 {
     PART*   part = (PART*) lookupPart( aLPID );
 
@@ -264,7 +264,7 @@ PART* LIB::LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable ) throw( IO_ERROR
 
 #if 0 && defined(DEBUG)
 
-void LIB::Test( int argc, char** argv ) throw( IO_ERROR );
+void LIB::Test( int argc, char** argv );
 {
 }
 
diff --git a/new/sch_lib.h b/new/sch_lib.h
index 9a383c31e..2801d16c7 100644
--- a/new/sch_lib.h
+++ b/new/sch_lib.h
@@ -69,8 +69,7 @@ protected:                  ///< derived classes must implement
      * Function ReadPart
      * fetches @a aPartName's s-expression into @a aResult after clear()ing aResult.
      */
-    virtual void ReadPart( STR_UTF* aResult, const STRING& aPartName, const STRING& aRev = "" )
-        throw( IO_ERROR ) = 0;
+    virtual void ReadPart( STR_UTF* aResult, const STRING& aPartName, const STRING& aRev = "" ) = 0;
 
     /**
      * Function ReadParts
@@ -80,15 +79,13 @@ protected:                  ///< derived classes must implement
      *        does not have a version string, then the most recent version is fetched.
      * @param aResults receives the s-expressions
      */
-    virtual void ReadParts( STR_UTFS* aResults, const STRINGS& aPartNames )
-        throw( IO_ERROR ) = 0;
+    virtual void ReadParts( STR_UTFS* aResults, const STRINGS& aPartNames ) = 0;
 
     /**
      * Function GetCategories
      * fetches all categories present in the library source into @a aResults
      */
-    virtual void GetCategories( STRINGS* aResults )
-        throw( IO_ERROR ) = 0;
+    virtual void GetCategories( STRINGS* aResults ) = 0;
 
     /**
      * Function GetCategoricalPartNames
@@ -99,8 +96,7 @@ protected:                  ///< derived classes must implement
      *
      * @param aResults is a place to put the fetched result, one category per STRING.
      */
-    virtual void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory="" )
-        throw( IO_ERROR ) = 0;
+    virtual void GetCategoricalPartNames( STRINGS* aResults, const STRING& aCategory="" ) = 0;
 
     /**
      * Function GetRevisions
@@ -112,8 +108,7 @@ protected:                  ///< derived classes must implement
      * the only result.  This means aPartName is present in the libsource, only once
      * without a revision.  This is a special case.
      */
-    virtual void GetRevisions( STRINGS* aResults, const STRING& aPartName )
-        throw( IO_ERROR ) = 0;
+    virtual void GetRevisions( STRINGS* aResults, const STRING& aPartName ) = 0;
 
     /**
      * Function FindParts
@@ -131,8 +126,7 @@ protected:                  ///< derived classes must implement
      *
      * @param aResults is a place to put the fetched part names, one part per STRING.
      */
-    virtual void FindParts( STRINGS* aResults, const STRING& aQuery )
-        throw( IO_ERROR ) = 0;
+    virtual void FindParts( STRINGS* aResults, const STRING& aQuery ) = 0;
 
     //-----</abstract for implementors>--------------------------------------
 
@@ -179,8 +173,7 @@ protected:                  ///< derived classes must implement
      * @return STRING - if the LIB_SINK support revision numbering, then return a
      *   revision name that was next in the sequence, e.g. "rev22", else "".
      */
-    virtual STRING WritePart( const STRING& aPartName, const STRING& aSExpression )
-        throw( IO_ERROR ) = 0;
+    virtual STRING WritePart( const STRING& aPartName, const STRING& aSExpression ) = 0;
 
 protected:
     STRING      sinkType;
@@ -255,21 +248,20 @@ public:
      *
      * @throw IO_ERROR if the part cannot be found or loaded.
      */
-    PART* LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable )
-        throw( IO_ERROR );
+    PART* LookupPart( const LPID& aLPID, LIB_TABLE* aLibTable );
 
     /**
      * Function ReloadPart
      * will reload the part assuming the library source has a changed content
      * for it.
      */
-    void ReloadPart( PART* aPart ) throw( IO_ERROR );
+    void ReloadPart( PART* aPart );
 
     /**
      * Function GetCategories
      * returns all categories of parts within this LIB into @a aResults.
      */
-    STRINGS GetCategories() throw( IO_ERROR );
+    STRINGS GetCategories();
 
     /**
      * Function GetCategoricalPartNames
@@ -277,7 +269,7 @@ public:
      * creates cache entries for the very same parts if they do not already exist
      * in this LIB (i.e. cache).
      */
-    STRINGS GetCategoricalPartNames( const STRING& aCategory = "" ) throw( IO_ERROR );
+    STRINGS GetCategoricalPartNames( const STRING& aCategory = "" );
 
 
     //-----<.use delegates: source and sink>--------------------------------
@@ -287,16 +279,16 @@ public:
      * saves the part to non-volatile storage and returns the next new revision
      * name in the sequence established by the LIB_SINK.
      */
-    STRING WritePart( PART* aPart ) throw( IO_ERROR );
+    STRING WritePart( PART* aPart );
 
-    void SetPartBody( PART* aPart, const STRING& aSExpression ) throw( IO_ERROR );
+    void SetPartBody( PART* aPart, const STRING& aSExpression );
 
     /**
      * Function GetRevisions
      * returns the revisions of @a aPartName that are present in this LIB.
      * The returned STRINGS will look like "rev1", "rev2", etc.
      */
-    STRINGS GetRevisions( const STRING& aPartName ) throw( IO_ERROR );
+    STRINGS GetRevisions( const STRING& aPartName );
 
     /**
      * Function FindParts
@@ -311,7 +303,7 @@ public:
      *  here is an RPN s-expression that uses (and ..) and (or ..) operators. For example
      *  "(and (footprint 0805)(value 33ohm)(category passives))"
      */
-    STRINGS FindParts( const STRING& aQuery ) throw( IO_ERROR )
+    STRINGS FindParts( const STRING& aQuery )
     {
         // run the query on the cached data first for any PARTS which are fully
         // parsed (i.e. cached), then on the LIB_SOURCE to find any that
@@ -321,7 +313,7 @@ public:
     }
 
 #if defined(DEBUG)
-    static void Test( int argc, char** argv ) throw( IO_ERROR );
+    static void Test( int argc, char** argv );
 #endif
 
 protected:
@@ -356,7 +348,7 @@ protected:
      *
      * @return PART* - the cached PART, or NULL if not found.  No ownership transferred.
      */
-    const PART* lookupPart( const LPID& aLPID ) throw( IO_ERROR );
+    const PART* lookupPart( const LPID& aLPID );
 };
 
 
diff --git a/new/sch_lib_table.cpp b/new/sch_lib_table.cpp
index 0e4fbb090..6773c279b 100644
--- a/new/sch_lib_table.cpp
+++ b/new/sch_lib_table.cpp
@@ -35,7 +35,7 @@ using namespace SCH;
 using namespace LT;         // tokens, enum T for LIB_TABLE
 
 
-LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ) :
+LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ):
     fallBack( aFallBackTable )
 {
     // not copying fall back, simply search aFallBackTable separately
@@ -43,7 +43,7 @@ LIB_TABLE::LIB_TABLE( LIB_TABLE* aFallBackTable ) :
 }
 
 
-void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
+void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in )
 {
     /*  grammar:
 
@@ -143,7 +143,6 @@ void LIB_TABLE::Parse( SCH_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
 
 
 void LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
-    throw( IO_ERROR )
 {
     out->Print( nestLevel, "(lib_table\n" );
     for( ROWS_CITER it = rows.begin();  it != rows.end();  ++it )
@@ -153,7 +152,6 @@ void LIB_TABLE::Format( OUTPUTFORMATTER* out, int nestLevel ) const
 
 
 void LIB_TABLE::ROW::Format( OUTPUTFORMATTER* out, int nestLevel ) const
-    throw( IO_ERROR )
 {
     out->Print( nestLevel, "(lib (logical %s)(type %s)(full_uri %s)(options %s))\n",
         out->Quotes( logicalName ).c_str(),
@@ -190,9 +188,7 @@ STRINGS LIB_TABLE::GetLogicalLibs()
     return ret;
 }
 
-
 PART* LIB_TABLE::LookupPart( const LPID& aLPID, LIB* aLocalLib )
-    throw( IO_ERROR )
 {
     LIB* lib = lookupLib( aLPID, aLocalLib );
 
@@ -201,7 +197,6 @@ PART* LIB_TABLE::LookupPart( const LPID& aLPID, LIB* aLocalLib )
 
 
 LIB* LIB_TABLE::lookupLib( const LPID& aLPID, LIB* aFallBackLib )
-    throw( IO_ERROR )
 {
     if( aLPID.GetLogicalLib().size() )
     {
@@ -234,7 +229,7 @@ LIB* LIB_TABLE::lookupLib( const LPID& aLPID, LIB* aFallBackLib )
 }
 
 
-void LIB_TABLE::loadLib( ROW* aRow ) throw( IO_ERROR )
+void LIB_TABLE::loadLib( ROW* aRow )
 {
     assert( !aRow->lib );   // caller should know better.
 
diff --git a/new/sch_lib_table.h b/new/sch_lib_table.h
index d05dfdb56..dc7c89994 100644
--- a/new/sch_lib_table.h
+++ b/new/sch_lib_table.h
@@ -146,8 +146,7 @@ public:
          * @param nestLevel is the indentation level to base all lines of the output.
          *   Actual indentation will be 2 spaces for each nestLevel.
          */
-        void Format( OUTPUTFORMATTER* out, int nestLevel ) const
-            throw( IO_ERROR );
+        void Format( OUTPUTFORMATTER* out, int nestLevel ) const;
 
     protected:
 
@@ -246,7 +245,7 @@ public:
      * @param nestLevel is the indentation level to base all lines of the output.
      *   Actual indentation will be 2 spaces for each nestLevel.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const;
 
     /**
      * Function LookupPart
@@ -268,7 +267,7 @@ public:
      *
      * @throw IO_ERROR if any problem occurs or if the part cannot be found.
      */
-    PART* LookupPart( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+    PART* LookupPart( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL );
 
     /**
      * Function GetLogicalLibs
@@ -366,14 +365,14 @@ private:
      *
      * @throw IO_ERROR if any problem occurs or if the LIB cannot be found or cannot be loaded.
      */
-    LIB* lookupLib( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL ) throw( IO_ERROR );
+    LIB* lookupLib( const LPID& aLogicalPartID, LIB* aFallBackLib = NULL );
 
     /**
      * Function loadLib
      * loads a LIB using information in @a aRow.  Call only if LIB not
      * already loaded.
      */
-    void loadLib( ROW* aRow ) throw( IO_ERROR );
+    void loadLib( ROW* aRow );
 
     typedef boost::ptr_map<STRING, ROW>     ROWS;
     typedef ROWS::iterator                  ROWS_ITER;
diff --git a/new/sch_part.cpp b/new/sch_part.cpp
index 730ded9a1..6c359541d 100644
--- a/new/sch_part.cpp
+++ b/new/sch_part.cpp
@@ -37,7 +37,6 @@
  * outputs a formatted "(at X Y [ANGLE])" s-expression
  */
  static void formatAt( OUTPUTFORMATTER* out, const SCH::POINT& aPos, ANGLE aAngle, int indent=0 )
-    throw( IO_ERROR )
 {
     // if( aPos.x || aPos.y || aAngle )
     {
@@ -48,7 +47,6 @@
 }
 
 static void formatStroke( OUTPUTFORMATTER* out, STROKE aStroke, int indent=0 )
-    throw( IO_ERROR )
 {
     if( aStroke == STROKE_DEFAULT )
         out->Print( indent, "(stroke %.6g)", InternalToWidth( aStroke ) );
@@ -318,7 +316,6 @@ PROPERTIES::iterator PART::propertyFind( const wxString& aPropertyName )
 
 
 void PART::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(part %s", partNameAndRev.c_str() );
 
@@ -392,7 +389,6 @@ void PART::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void PROPERTY::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     wxASSERT( owner );      // all PROPERTYs should have an owner.
 
@@ -433,7 +429,6 @@ TEXT_EFFECTS* PROPERTY::EffectsLookup()
 
 
 void TEXT_EFFECTS::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     if( propName.IsEmpty() )
         out->Print( indent, "(effects " );
@@ -451,7 +446,6 @@ void TEXT_EFFECTS::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void FONT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     if( italic || bold || !name.IsEmpty() || size.height != FONTZ_DEFAULT || size.width != FONTZ_DEFAULT )
     {
@@ -476,7 +470,6 @@ void FONT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void PIN::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     bool    hasSignal = !signal.text.IsEmpty();
     bool    hasPad    = !pad.text.IsEmpty();
@@ -516,7 +509,6 @@ PIN::~PIN()
 
 
 void PINTEXT::Format( OUTPUTFORMATTER* out, const char* aElement, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(%s %s", aElement, out->Quotew( text ).c_str() );
 
@@ -530,7 +522,6 @@ void PINTEXT::Format( OUTPUTFORMATTER* out, const char* aElement, int indent, in
 
 
 void POLY_LINE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(%s ",  pts.size() == 2 ? "line" : "polyline" );
     formatContents( out, indent, ctl );
@@ -538,7 +529,6 @@ void POLY_LINE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void POLY_LINE::formatContents(  OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     formatStroke( out, stroke );
 
@@ -576,15 +566,12 @@ void POLY_LINE::formatContents(  OUTPUTFORMATTER* out, int indent, int ctl ) con
 
 
 void BEZIER::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     out->Print( indent, "(bezier " );
     formatContents( out, indent, ctl );     // inherited from POLY_LINE
 }
 
-
 void RECTANGLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     // (rectangle (start X Y) (end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
 
@@ -603,7 +590,6 @@ void RECTANGLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void CIRCLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (circle (center X Y)(radius LENGTH) [(stroke WIDTH)] (fill FILL_TYPE))
@@ -623,7 +609,6 @@ void CIRCLE::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void ARC::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (arc (pos X Y)(radius RADIUS)(start X Y)(end X Y) [(stroke WIDTH)] (fill FILL_TYPE))
@@ -646,7 +631,6 @@ void ARC::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
 
 
 void GR_TEXT::Format( OUTPUTFORMATTER* out, int indent, int ctl ) const
-    throw( IO_ERROR )
 {
     /*
         (text "This is the text that gets drawn."
diff --git a/new/sch_part.h b/new/sch_part.h
index 2340ff42a..ea0bb5542 100644
--- a/new/sch_part.h
+++ b/new/sch_part.h
@@ -177,8 +177,7 @@ public:
         bold( false )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     // trust compiler to write its own assignment operator for this class OK.
 };
@@ -200,8 +199,7 @@ struct TEXT_EFFECTS
         property( 0 )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     // trust compiler to write its own assignment operator for this class OK.
 };
@@ -246,7 +244,6 @@ public:
      * outputs this object to @a aFormatter in s-expression form.
      */
     virtual void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR )
     {}
 };
 
@@ -263,8 +260,7 @@ protected:
     int         fillType;       // T_none, T_filled, or T_transparent
     POINTS      pts;
 
-    void formatContents( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void formatContents( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 public:
     POLY_LINE( PART* aOwner ) :
@@ -274,8 +270,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -299,8 +294,7 @@ public:
         fillType  = PR::T_none;
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -330,8 +324,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -362,8 +355,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -396,8 +388,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -441,8 +432,7 @@ public:
         return SWEET_LEXER::TokenName( PR::T( aJustify ) );
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -507,8 +497,7 @@ public:
         return effects;
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -529,8 +518,7 @@ struct PINTEXT
         isVisible( true )
     {}
 
-    void Format( OUTPUTFORMATTER* aFormatter, const char* aElement, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, const char* aElement, int aNestLevel, int aControlBits ) const;
 };
 
 
@@ -565,8 +553,7 @@ public:
         return SWEET_LEXER::TokenName( PR::T( shape ) );
     }
 
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
     BASE_GRAPHIC* Clone( PART* aOwner ) const
     {
@@ -626,7 +613,7 @@ public:
      * instead an exception would be thrown.
      * @throw IO_ERROR if any problem occurs or if the part cannot be found.
      */
-    PART* Lookup( LIB_TABLE* aLibTable, LIB* aFallBackLib ) throw( IO_ERROR )
+    PART* Lookup( LIB_TABLE* aLibTable, LIB* aFallBackLib )
     {
         if( !part )
         {
@@ -725,8 +712,7 @@ public:
      * @param aControlBits are bit flags ORed together which control how the output
      *  is done.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits = 0 ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits = 0 ) const;
 
     /**
      * Function PropDelete
diff --git a/pagelayout_editor/page_layout_writer.cpp b/pagelayout_editor/page_layout_writer.cpp
index ecc242ad4..b477334b2 100644
--- a/pagelayout_editor/page_layout_writer.cpp
+++ b/pagelayout_editor/page_layout_writer.cpp
@@ -63,26 +63,21 @@ protected:
     virtual ~WORKSHEET_LAYOUT_IO() {}
 
 public:
-    void Format( WORKSHEET_LAYOUT* aPageLayout ) const
-        throw( IO_ERROR );
+    void Format( WORKSHEET_LAYOUT* aPageLayout ) const;
 
-    void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-        throw( IO_ERROR );
+    void Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const;
 
 private:
-    void format( WORKSHEET_LAYOUT* aPageLayout ) const
-        throw( IO_ERROR );
+    void format( WORKSHEET_LAYOUT* aPageLayout ) const;
 
-    void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const throw( IO_ERROR );
-    void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const throw( IO_ERROR );
+    void format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const;
+    void format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const;
     void format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel )
-                 const throw( IO_ERROR );
-    void format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
-                 throw( IO_ERROR );
-    void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const
-                           throw( IO_ERROR );
-    void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
-    void formatOptions( WORKSHEET_DATAITEM* aItem ) const throw( IO_ERROR );
+                 const;
+    void format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const;
+    void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const;
+    void formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const;
+    void formatOptions( WORKSHEET_DATAITEM* aItem ) const;
 };
 
 
@@ -162,7 +157,6 @@ void WORKSHEET_LAYOUT::SaveInString( wxString& aOutputString )
 
 
 void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     switch( aItem->GetType() )
     {
@@ -190,7 +184,6 @@ void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) co
 
 
 void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const
-    throw( IO_ERROR )
 {
     LOCALE_IO   toggle;     // switch on/off the locale "C" notation
 
@@ -230,7 +223,6 @@ void WORKSHEET_LAYOUT_IO::Format( WORKSHEET_LAYOUT* aPageLayout ) const
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_tbtext ) );
     m_out->Print( 0, " %s", m_out->Quotew( aItem->m_TextBase ).c_str() );
@@ -311,7 +303,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_TEXT* aItem, int aNestLevel
 }
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT )
         m_out->Print( aNestLevel, "(%s", getTokenName( T_rect ) );
@@ -335,7 +326,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM* aItem, int aNestLevel ) co
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_polygon ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -386,7 +376,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_POLYPOLYGON* aItem, int aNe
 
 
 void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_bitmap ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -416,7 +405,6 @@ void WORKSHEET_LAYOUT_IO::format( WORKSHEET_DATAITEM_BITMAP* aItem, int aNestLev
 
 void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken,
                                             POINT_COORD & aCoord ) const
-                       throw( IO_ERROR )
 {
     m_out->Print( 0, " (%s %s %s", aToken,
                   double2Str( aCoord.m_Pos.x ).c_str(),
@@ -445,7 +433,6 @@ void WORKSHEET_LAYOUT_IO::formatCoordinate( const char * aToken,
 
 
 void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) const
-    throw( IO_ERROR )
 {
     if( aItem->m_RepeatCount <= 1 )
         return;
@@ -465,7 +452,6 @@ void WORKSHEET_LAYOUT_IO::formatRepeatParameters( WORKSHEET_DATAITEM* aItem ) co
 
 
 void WORKSHEET_LAYOUT_IO::formatOptions( WORKSHEET_DATAITEM* aItem ) const
-                       throw( IO_ERROR )
 {
     switch( aItem->GetPage1Option() )
     {
diff --git a/pcb_calculator/datafile_read_write.cpp b/pcb_calculator/datafile_read_write.cpp
index b0c795ea8..349dd411d 100644
--- a/pcb_calculator/datafile_read_write.cpp
+++ b/pcb_calculator/datafile_read_write.cpp
@@ -123,7 +123,7 @@ static const char* regtype_str[] =
     "normal", "3terminal"
 };
 
-int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR )
+int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const
 {
     int nestlevel = 0;
     aFormatter->Print( nestlevel++, "(datafile\n");
@@ -138,7 +138,7 @@ int PCB_CALCULATOR_DATAFILE::WriteHeader( OUTPUTFORMATTER* aFormatter ) const th
 }
 
 void PCB_CALCULATOR_DATAFILE::Format( OUTPUTFORMATTER* aFormatter,
-                              int aNestLevel ) const throw( IO_ERROR )
+                              int aNestLevel ) const
 {
     // Write regulators list:
     aFormatter->Print( aNestLevel++, "(%s\n", getTokenName( T_regulators ) );
@@ -163,7 +163,6 @@ void PCB_CALCULATOR_DATAFILE::Format( OUTPUTFORMATTER* aFormatter,
 
 
 void PCB_CALCULATOR_DATAFILE::Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser )
-                              throw( IO_ERROR, PARSE_ERROR )
 {
     aParser->Parse( this );
 }
@@ -184,7 +183,7 @@ PCB_CALCULATOR_DATAFILE_PARSER::PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxS
 }
 
 
-void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR )
+void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList )
 {
     T token;
     while( ( token = NextTok() ) != T_EOF)
@@ -203,7 +202,6 @@ void PCB_CALCULATOR_DATAFILE_PARSER::Parse( PCB_CALCULATOR_DATAFILE* aDataList )
 }
 
 void PCB_CALCULATOR_DATAFILE_PARSER::ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     T token;
     wxString name;
diff --git a/pcb_calculator/datafile_read_write.h b/pcb_calculator/datafile_read_write.h
index 1f04bde37..ecf303d63 100644
--- a/pcb_calculator/datafile_read_write.h
+++ b/pcb_calculator/datafile_read_write.h
@@ -42,9 +42,9 @@ protected:
 public:
     PCB_CALCULATOR_DATAFILE( REGULATOR_LIST * aList );
 
-    int         WriteHeader( OUTPUTFORMATTER* aFormatter ) const throw( IO_ERROR );
-    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const throw( IO_ERROR );
-    void        Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser ) throw( IO_ERROR, PARSE_ERROR );
+    int         WriteHeader( OUTPUTFORMATTER* aFormatter ) const ;
+    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const ;
+    void        Parse( PCB_CALCULATOR_DATAFILE_PARSER* aParser );
 };
 
 
@@ -58,8 +58,8 @@ public:
     PCB_CALCULATOR_DATAFILE_PARSER( LINE_READER* aReader );
     PCB_CALCULATOR_DATAFILE_PARSER( char* aLine, wxString aSource );
     LINE_READER* GetReader() { return reader; };
-    void Parse( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR );
-    void ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList ) throw( IO_ERROR, PARSE_ERROR );
+    void Parse( PCB_CALCULATOR_DATAFILE* aDataList );
+    void ParseRegulatorDescr( PCB_CALCULATOR_DATAFILE* aDataList );
 };
 
 #endif // PDATAFILE_READ_WRITE_H_
diff --git a/pcbnew/class_netclass.cpp b/pcbnew/class_netclass.cpp
index c10f7c8cb..8be795da0 100644
--- a/pcbnew/class_netclass.cpp
+++ b/pcbnew/class_netclass.cpp
@@ -249,7 +249,6 @@ void NETCLASS::Show( int nestLevel, std::ostream& os ) const
 
 
 void NETCLASS::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-    throw( IO_ERROR )
 {
     aFormatter->Print( aNestLevel, "(net_class %s %s\n",
                        aFormatter->Quotew( GetName() ).c_str(),
diff --git a/pcbnew/class_netclass.h b/pcbnew/class_netclass.h
index 13eb4f815..6bcdd8a33 100644
--- a/pcbnew/class_netclass.h
+++ b/pcbnew/class_netclass.h
@@ -210,8 +210,7 @@ public:
      * @param aControlBits The control bit definition for object specific formatting.
      * @throw IO_ERROR on write error.
      */
-    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
-        throw( IO_ERROR );
+    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
 
 #if defined(DEBUG)
     void Show( int nestLevel, std::ostream& os ) const;
diff --git a/pcbnew/github/github_plugin.cpp b/pcbnew/github/github_plugin.cpp
index 0f824cc07..0ca380664 100644
--- a/pcbnew/github/github_plugin.cpp
+++ b/pcbnew/github/github_plugin.cpp
@@ -529,7 +529,7 @@ bool GITHUB_PLUGIN::repoURL_zipURL( const wxString& aRepoURL, std::string* aZipU
 }
 
 
-void GITHUB_PLUGIN::remoteGetZip( const wxString& aRepoURL ) throw( IO_ERROR )
+void GITHUB_PLUGIN::remoteGetZip( const wxString& aRepoURL )
 {
     std::string  zip_url;
 
diff --git a/pcbnew/github/github_plugin.h b/pcbnew/github/github_plugin.h
index f571ce4b2..76b0e2ef9 100644
--- a/pcbnew/github/github_plugin.h
+++ b/pcbnew/github/github_plugin.h
@@ -221,7 +221,7 @@ protected:
      * is received into the m_input_stream. If the image has already been stored,
      * do nothing.
      */
-    void remoteGetZip( const wxString& aRepoURL ) throw( IO_ERROR );
+    void remoteGetZip( const wxString& aRepoURL );
 
     wxString    m_lib_path;     ///< from aLibraryPath, something like https://github.com/liftoff-sr/pretty_footprints
     std::string m_zip_image;    ///< byte image of the zip file in its entirety.
diff --git a/pcbnew/gpcb_plugin.cpp b/pcbnew/gpcb_plugin.cpp
index eb4d0d7c2..a4a7f5a19 100644
--- a/pcbnew/gpcb_plugin.cpp
+++ b/pcbnew/gpcb_plugin.cpp
@@ -187,7 +187,7 @@ class GPCB_FPL_CACHE
     wxDateTime      m_mod_time;     /// Footprint library path modified time stamp.
     MODULE_MAP      m_modules;      /// Map of footprint file name per MODULE*.
 
-    MODULE* parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR, PARSE_ERROR );
+    MODULE* parseMODULE( LINE_READER* aLineReader );
 
     /**
      * Function testFlags
@@ -418,7 +418,7 @@ bool GPCB_FPL_CACHE::IsModified( const wxString& aLibPath, const wxString& aFoot
 }
 
 
-MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader ) throw( IO_ERROR, PARSE_ERROR )
+MODULE* GPCB_FPL_CACHE::parseMODULE( LINE_READER* aLineReader )
 {
     #define TEXT_DEFAULT_SIZE  ( 40*IU_PER_MILS )
     #define OLD_GPCB_UNIT_CONV IU_PER_MILS
diff --git a/pcbnew/kicad_netlist_reader.cpp b/pcbnew/kicad_netlist_reader.cpp
index c3794863b..c78c54deb 100644
--- a/pcbnew/kicad_netlist_reader.cpp
+++ b/pcbnew/kicad_netlist_reader.cpp
@@ -35,7 +35,7 @@
 using namespace NL_T;
 
 
-void KICAD_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_READER::LoadNetlist()
 {
     m_parser->Parse();
 
@@ -61,7 +61,7 @@ KICAD_NETLIST_PARSER::KICAD_NETLIST_PARSER( LINE_READER* aReader, NETLIST* aNetl
 }
 
 
-void KICAD_NETLIST_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::skipCurrent()
 {
     int curr_level = 0;
 
@@ -81,7 +81,7 @@ void KICAD_NETLIST_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void KICAD_NETLIST_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_PARSER::Parse()
 {
     int plevel = 0;     // the count of ')' to read and end of file,
                         // after parsing all sections
@@ -177,7 +177,7 @@ void KICAD_NETLIST_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_poin
 }
 
 
-void KICAD_NETLIST_PARSER::parseNet() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::parseNet()
 {
     /* Parses a section like
      * (net (code 20) (name /PC-A0)
@@ -268,7 +268,7 @@ void KICAD_NETLIST_PARSER::parseNet() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void KICAD_NETLIST_PARSER::parseComponent() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void KICAD_NETLIST_PARSER::parseComponent()
 {
    /* Parses a section like
      * (comp (ref P1)
@@ -380,7 +380,7 @@ void KICAD_NETLIST_PARSER::parseComponent() throw( IO_ERROR, PARSE_ERROR, boost:
 }
 
 
-void KICAD_NETLIST_PARSER::parseLibPartList() throw( IO_ERROR, PARSE_ERROR )
+void KICAD_NETLIST_PARSER::parseLibPartList()
 {
    /* Parses a section like
     *   (libpart (lib device) (part C)
diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index fb439f057..8fd371404 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -432,7 +432,6 @@ void PCB_IO::Save( const wxString& aFileName, BOARD* aBoard, const PROPERTIES* a
 
 
 BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput )
-    throw( FUTURE_FORMAT_ERROR, PARSE_ERROR, IO_ERROR )
 {
     std::string input = TO_UTF8( aClipboardSourceInput );
 
@@ -455,7 +454,6 @@ BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput )
 
 
 void PCB_IO::Format( BOARD_ITEM* aItem, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     LOCALE_IO   toggle;     // public API function, perform anything convenient for caller
 
@@ -527,7 +525,6 @@ void PCB_IO::formatLayer( const BOARD_ITEM* aItem ) const
 
 
 void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     const BOARD_DESIGN_SETTINGS& dsnSettings = aBoard->GetDesignSettings();
 
@@ -784,7 +781,6 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
 
 
 void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(dimension %s (width %s)",
                   FMT_IU( aDimension->GetValue() ).c_str(),
@@ -846,7 +842,6 @@ void PCB_IO::format( DIMENSION* aDimension, int aNestLevel ) const
 
 
 void PCB_IO::format( DRAWSEGMENT* aSegment, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     unsigned i;
 
@@ -912,7 +907,6 @@ void PCB_IO::format( DRAWSEGMENT* aSegment, int aNestLevel ) const
 
 
 void PCB_IO::format( EDGE_MODULE* aModuleDrawing, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     switch( aModuleDrawing->GetShape() )
     {
@@ -976,7 +970,6 @@ void PCB_IO::format( EDGE_MODULE* aModuleDrawing, int aNestLevel ) const
 
 
 void PCB_IO::format( PCB_TARGET* aTarget, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(target %s (at %s) (size %s)",
                   ( aTarget->GetShape() ) ? "x" : "plus",
@@ -996,7 +989,6 @@ void PCB_IO::format( PCB_TARGET* aTarget, int aNestLevel ) const
 
 
 void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( !( m_ctl & CTL_OMIT_INITIAL_COMMENTS ) )
     {
@@ -1147,7 +1139,6 @@ void PCB_IO::format( MODULE* aModule, int aNestLevel ) const
 
 
 void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     std::string  output;
 
@@ -1246,7 +1237,6 @@ void PCB_IO::formatLayers( LSET aLayerMask, int aNestLevel ) const
 
 
 void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     const char* shape;
 
@@ -1365,7 +1355,6 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
 
 
 void PCB_IO::format( TEXTE_PCB* aText, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     m_out->Print( aNestLevel, "(gr_text %s (at %s",
                   m_out->Quotew( aText->GetText() ).c_str(),
@@ -1390,7 +1379,6 @@ void PCB_IO::format( TEXTE_PCB* aText, int aNestLevel ) const
 
 
 void PCB_IO::format( TEXTE_MODULE* aText, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     wxString type;
 
@@ -1448,7 +1436,6 @@ void PCB_IO::format( TEXTE_MODULE* aText, int aNestLevel ) const
 
 
 void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     if( aTrack->Type() == PCB_VIA_T )
     {
@@ -1514,7 +1501,6 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
 
 
 void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
-    throw( IO_ERROR )
 {
     // Save the NET info; For keepout zones, net code and net name are irrelevant
     // so be sure a dummy value is stored, just for ZONE_CONTAINER compatibility
diff --git a/pcbnew/kicad_plugin.h b/pcbnew/kicad_plugin.h
index 9a5f362e2..4993b6eb9 100644
--- a/pcbnew/kicad_plugin.h
+++ b/pcbnew/kicad_plugin.h
@@ -145,8 +145,7 @@ public:
      * @param aNestLevel The indentation nest level.
      * @throw IO_ERROR on write error.
      */
-    void Format( BOARD_ITEM* aItem, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void Format( BOARD_ITEM* aItem, int aNestLevel = 0 ) const;
 
     std::string GetStringOutput( bool doClear )
     {
@@ -159,8 +158,7 @@ public:
 
     void SetOutputFormatter( OUTPUTFORMATTER* aFormatter ) { m_out = aFormatter; }
 
-    BOARD_ITEM* Parse( const wxString& aClipboardSourceInput )
-        throw( FUTURE_FORMAT_ERROR, PARSE_ERROR, IO_ERROR );
+    BOARD_ITEM* Parse( const wxString& aClipboardSourceInput );
 
 protected:
 
@@ -189,43 +187,31 @@ protected:
     void init( const PROPERTIES* aProperties );
 
 private:
-    void format( BOARD* aBoard, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( BOARD* aBoard, int aNestLevel = 0 ) const;
 
-    void format( DIMENSION* aDimension, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( DIMENSION* aDimension, int aNestLevel = 0 ) const;
 
-    void format( EDGE_MODULE* aModuleDrawing, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( EDGE_MODULE* aModuleDrawing, int aNestLevel = 0 ) const;
 
-    void format( DRAWSEGMENT* aSegment, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( DRAWSEGMENT* aSegment, int aNestLevel = 0 ) const;
 
-    void format( PCB_TARGET* aTarget, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( PCB_TARGET* aTarget, int aNestLevel = 0 ) const;
 
-    void format( MODULE* aModule, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( MODULE* aModule, int aNestLevel = 0 ) const;
 
-    void format( D_PAD* aPad, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( D_PAD* aPad, int aNestLevel = 0 ) const;
 
-    void format( TEXTE_PCB* aText, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TEXTE_PCB* aText, int aNestLevel = 0 ) const;
 
-    void format( TEXTE_MODULE* aText, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TEXTE_MODULE* aText, int aNestLevel = 0 ) const;
 
-    void format( TRACK* aTrack, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( TRACK* aTrack, int aNestLevel = 0 ) const;
 
-    void format( ZONE_CONTAINER* aZone, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void format( ZONE_CONTAINER* aZone, int aNestLevel = 0 ) const;
 
     void formatLayer( const BOARD_ITEM* aItem ) const;
 
-    void formatLayers( LSET aLayerMask, int aNestLevel = 0 ) const
-        throw( IO_ERROR );
+    void formatLayers( LSET aLayerMask, int aNestLevel = 0 ) const;
 };
 
 #endif  // KICAD_PLUGIN_H_
diff --git a/pcbnew/legacy_netlist_reader.cpp b/pcbnew/legacy_netlist_reader.cpp
index 3d342d0a9..b51409f27 100644
--- a/pcbnew/legacy_netlist_reader.cpp
+++ b/pcbnew/legacy_netlist_reader.cpp
@@ -34,7 +34,7 @@
 #include <pcb_netlist.h>
 #include <netlist_reader.h>
 
-void LEGACY_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer )
+void LEGACY_NETLIST_READER::LoadNetlist()
 {
     int state            = 0;
     bool is_comment      = false;
@@ -97,7 +97,6 @@ void LEGACY_NETLIST_READER::LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::
 
 
 COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText )
-    throw( PARSE_ERROR, boost::bad_pointer )
 {
     char*    text;
     wxString msg;
@@ -178,7 +177,7 @@ COMPONENT* LEGACY_NETLIST_READER::loadComponent( char* aText )
 }
 
 
-void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent ) throw( PARSE_ERROR )
+void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent )
 {
     wxString msg;
     char*    p;
@@ -212,7 +211,7 @@ void LEGACY_NETLIST_READER::loadNet( char* aText, COMPONENT* aComponent ) throw(
 }
 
 
-void LEGACY_NETLIST_READER::loadFootprintFilters() throw( IO_ERROR, PARSE_ERROR )
+void LEGACY_NETLIST_READER::loadFootprintFilters()
 {
     wxArrayString filters;
     wxString      cmpRef;
diff --git a/pcbnew/loadcmp.cpp b/pcbnew/loadcmp.cpp
index 75055e7d1..00290b983 100644
--- a/pcbnew/loadcmp.cpp
+++ b/pcbnew/loadcmp.cpp
@@ -332,7 +332,6 @@ MODULE* PCB_BASE_FRAME::LoadFootprint( const LIB_ID& aFootprintId )
 
 
 MODULE* PCB_BASE_FRAME::loadFootprint( const LIB_ID& aFootprintId )
-    throw( IO_ERROR, PARSE_ERROR, boost::interprocess::lock_exception )
 {
     FP_LIB_TABLE*   fptbl = Prj().PcbFootprintLibs();
 
diff --git a/pcbnew/netlist.cpp b/pcbnew/netlist.cpp
index 7443cb0cb..9024ffb20 100644
--- a/pcbnew/netlist.cpp
+++ b/pcbnew/netlist.cpp
@@ -224,7 +224,6 @@ MODULE* PCB_EDIT_FRAME::ListAndSelectModuleName()
 #define ALLOW_PARTIAL_FPID      1
 
 void PCB_EDIT_FRAME::LoadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
-    throw( IO_ERROR, PARSE_ERROR )
 {
     wxString   msg;
     LIB_ID     lastFPID;
diff --git a/pcbnew/netlist_reader.cpp b/pcbnew/netlist_reader.cpp
index 06569a8d0..7949f4a48 100644
--- a/pcbnew/netlist_reader.cpp
+++ b/pcbnew/netlist_reader.cpp
@@ -79,7 +79,6 @@ NETLIST_READER::NETLIST_FILE_T NETLIST_READER::GuessNetlistFileType( LINE_READER
 NETLIST_READER* NETLIST_READER::GetNetlistReader( NETLIST*        aNetlist,
                                                   const wxString& aNetlistFileName,
                                                   const wxString& aCompFootprintFileName )
-    throw( IO_ERROR )
 {
     wxASSERT( aNetlist != NULL );
 
@@ -110,7 +109,7 @@ NETLIST_READER* NETLIST_READER::GetNetlistReader( NETLIST*        aNetlist,
 }
 
 
-bool CMP_READER::Load( NETLIST* aNetlist ) throw( IO_ERROR, PARSE_ERROR )
+bool CMP_READER::Load( NETLIST* aNetlist )
 {
     wxCHECK_MSG( aNetlist != NULL,true, wxT( "No netlist passed to CMP_READER::Load()" ) );
 
diff --git a/pcbnew/netlist_reader.h b/pcbnew/netlist_reader.h
index eccae96e6..74a788f18 100644
--- a/pcbnew/netlist_reader.h
+++ b/pcbnew/netlist_reader.h
@@ -100,7 +100,7 @@ public:
      * is not updated. This is an usual case, in CvPcb, but can be used to
      * print a warning in Pcbnew.
      */
-    bool Load( NETLIST* aNetlist ) throw( IO_ERROR, PARSE_ERROR );
+    bool Load( NETLIST* aNetlist );
 };
 
 
@@ -170,8 +170,7 @@ public:
      */
     static NETLIST_READER* GetNetlistReader( NETLIST*        aNetlist,
                                              const wxString& aNetlistFileName,
-                                             const wxString& aCompFootprintFileName = wxEmptyString )
-        throw( IO_ERROR );
+                                             const wxString& aCompFootprintFileName = wxEmptyString );
 
     /**
      * Function LoadNetlist
@@ -180,7 +179,7 @@ public:
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    virtual void LoadNetlist() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) = 0;
+    virtual void LoadNetlist() = 0;
 
     /**
      * Function GetLineReader()
@@ -220,7 +219,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @return the new component created by parsing \a aLine
      * @throw PARSE_ERROR when \a aLine is not a valid component description.
      */
-    COMPONENT* loadComponent( char* aText ) throw( PARSE_ERROR, boost::bad_pointer );
+    COMPONENT* loadComponent( char* aText );
 
     /**
      * Function loadFootprintFilters
@@ -241,7 +240,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    void loadFootprintFilters() throw( IO_ERROR, PARSE_ERROR );
+    void loadFootprintFilters();
 
     /**
      * Function loadNet
@@ -251,7 +250,7 @@ class LEGACY_NETLIST_READER : public NETLIST_READER
      * @param aComponent is the component to add the net to.
      * @throw PARSE_ERROR if a error occurs reading \a aText.
      */
-    void loadNet( char* aText, COMPONENT* aComponent ) throw( PARSE_ERROR );
+    void loadNet( char* aText, COMPONENT* aComponent );
 
 public:
 
@@ -283,7 +282,7 @@ public:
      * @throw IO_ERROR if a file IO error occurs.
      * @throw PARSE_ERROR if an error occurs while parsing the file.
      */
-    virtual void LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) override;
+    virtual void LoadNetlist() override;
 };
 
 
@@ -303,7 +302,7 @@ private:
      * Skip the current token level, i.e
      * search for the RIGHT parenthesis which closes the current description
      */
-    void skipCurrent() throw( IO_ERROR, PARSE_ERROR );
+    void skipCurrent();
 
     /**
      * Function parseComponent
@@ -315,7 +314,7 @@ private:
      * (sheetpath (names /) (tstamps /))
      * (tstamp 3256759C))
      */
-    void parseComponent() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer );
+    void parseComponent();
 
     /**
      * Function parseNet
@@ -327,7 +326,7 @@ private:
      *
      * and set the corresponding pads netnames
      */
-    void parseNet() throw( IO_ERROR, PARSE_ERROR );
+    void parseNet();
 
     /**
      * Function parseLibPartList
@@ -351,7 +350,7 @@ private:
      *  <p>This section is used by CvPcb, and is not useful in Pcbnew,
      *  therefore it it not always read </p>
      */
-    void parseLibPartList() throw( IO_ERROR, PARSE_ERROR );
+    void parseLibPartList();
 
 
 public:
@@ -365,7 +364,7 @@ public:
      * Function Parse
      * parse the full netlist
      */
-    void Parse() throw( IO_ERROR, PARSE_ERROR, boost::bad_pointer );
+    void Parse();
 
     // Useful for debug only:
     const char* getTokenName( NL_T::T aTok )
@@ -397,7 +396,7 @@ public:
         delete m_parser;
     }
 
-    virtual void LoadNetlist() throw ( IO_ERROR, PARSE_ERROR, boost::bad_pointer ) override;
+    virtual void LoadNetlist() override;
 };
 
 
diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp
index 543ff9156..e0dff8823 100644
--- a/pcbnew/pcb_parser.cpp
+++ b/pcbnew/pcb_parser.cpp
@@ -121,7 +121,7 @@ void PCB_PARSER::pushValueIntoMap( int aIndex, int aValue )
     m_netCodes[aIndex] = aValue;
 }
 
-double PCB_PARSER::parseDouble() throw( IO_ERROR )
+double PCB_PARSER::parseDouble()
 {
     char* tmp;
 
@@ -151,7 +151,7 @@ double PCB_PARSER::parseDouble() throw( IO_ERROR )
 }
 
 
-bool PCB_PARSER::parseBool() throw( PARSE_ERROR )
+bool PCB_PARSER::parseBool()
 {
     T token = NextTok();
 
@@ -166,7 +166,7 @@ bool PCB_PARSER::parseBool() throw( PARSE_ERROR )
 }
 
 
-int PCB_PARSER::parseVersion() throw( IO_ERROR, PARSE_ERROR )
+int PCB_PARSER::parseVersion()
 {
     if( NextTok() != T_version )
         Expecting( GetTokenText( T_version ) );
@@ -203,7 +203,7 @@ wxString PCB_PARSER::GetRequiredVersion()
 }
 
 
-wxPoint PCB_PARSER::parseXY() throw( PARSE_ERROR, IO_ERROR )
+wxPoint PCB_PARSER::parseXY()
 {
     if( CurTok() != T_LEFT )
         NeedLEFT();
@@ -223,7 +223,7 @@ wxPoint PCB_PARSER::parseXY() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR )
+void PCB_PARSER::parseXY( int* aX, int* aY )
 {
     wxPoint pt = parseXY();
 
@@ -235,7 +235,7 @@ void PCB_PARSER::parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR )
+void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText )
 {
     wxCHECK_RET( CurTok() == T_effects,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as EDA_TEXT." ) );
@@ -332,7 +332,7 @@ void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-S3D_INFO* PCB_PARSER::parse3DModel() throw( PARSE_ERROR, IO_ERROR )
+S3D_INFO* PCB_PARSER::parse3DModel()
 {
     wxCHECK_MSG( CurTok() == T_model, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as S3D_INFO." ) );
@@ -402,7 +402,7 @@ S3D_INFO* PCB_PARSER::parse3DModel() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-BOARD_ITEM* PCB_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR )
+BOARD_ITEM* PCB_PARSER::Parse()
 {
     T               token;
     BOARD_ITEM*     item;
@@ -441,7 +441,7 @@ BOARD_ITEM* PCB_PARSER::Parse() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-BOARD* PCB_PARSER::parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR )
+BOARD* PCB_PARSER::parseBOARD()
 {
     try
     {
@@ -457,7 +457,7 @@ BOARD* PCB_PARSER::parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERRO
 }
 
 
-BOARD* PCB_PARSER::parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR )
+BOARD* PCB_PARSER::parseBOARD_unchecked()
 {
     T token;
 
@@ -547,7 +547,7 @@ BOARD* PCB_PARSER::parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseHeader() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseHeader()
 {
     wxCHECK_RET( CurTok() == T_kicad_pcb,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a header." ) );
@@ -583,7 +583,7 @@ void PCB_PARSER::parseHeader() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseGeneralSection() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseGeneralSection()
 {
      wxCHECK_RET( CurTok() == T_general,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -628,7 +628,7 @@ void PCB_PARSER::parseGeneralSection() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parsePAGE_INFO()
 {
     wxCHECK_RET( CurTok() == T_page,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a PAGE_INFO." ) );
@@ -684,7 +684,7 @@ void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseTITLE_BLOCK()
 {
     wxCHECK_RET( CurTok() == T_title_block,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -767,7 +767,7 @@ void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseLayer( LAYER* aLayer )
 {
     T           token;
 
@@ -809,7 +809,7 @@ void PCB_PARSER::parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR )
 
 
 
-void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseLayers()
 {
     wxCHECK_RET( CurTok() == T_layers,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as layers." ) );
@@ -922,7 +922,7 @@ void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
 
 
 template<class T, class M>
-T PCB_PARSER::lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR )
+T PCB_PARSER::lookUpLayer( const M& aMap )
 {
     // avoid constructing another std::string, use lexer's directly
     typename M::const_iterator it = aMap.find( curText );
@@ -955,7 +955,7 @@ T PCB_PARSER::lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer() throw( PARSE_ERROR, IO_ERROR )
+PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer()
 {
     wxCHECK_MSG( CurTok() == T_layer, UNDEFINED_LAYER,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as layer." ) );
@@ -970,7 +970,7 @@ PCB_LAYER_ID PCB_PARSER::parseBoardItemLayer() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-LSET PCB_PARSER::parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR )
+LSET PCB_PARSER::parseBoardItemLayersAsMask()
 {
     wxCHECK_MSG( CurTok() == T_layers, LSET(),
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -988,7 +988,7 @@ LSET PCB_PARSER::parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR )
 }
 
 
-void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseSetup()
 {
     wxCHECK_RET( CurTok() == T_setup,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as setup." ) );
@@ -1223,7 +1223,7 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseNETINFO_ITEM()
 {
     wxCHECK_RET( CurTok() == T_net,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as net." ) );
@@ -1249,7 +1249,7 @@ void PCB_PARSER::parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-void PCB_PARSER::parseNETCLASS() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PARSER::parseNETCLASS()
 {
     wxCHECK_RET( CurTok() == T_net_class,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as net class." ) );
@@ -1332,7 +1332,7 @@ void PCB_PARSER::parseNETCLASS() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR )
+DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT()
 {
     wxCHECK_MSG( CurTok() == T_gr_arc || CurTok() == T_gr_circle || CurTok() == T_gr_curve ||
                  CurTok() == T_gr_line || CurTok() == T_gr_poly, NULL,
@@ -1494,7 +1494,7 @@ DRAWSEGMENT* PCB_PARSER::parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR )
+TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB()
 {
     wxCHECK_MSG( CurTok() == T_gr_text, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as TEXTE_PCB." ) );
@@ -1562,7 +1562,7 @@ TEXTE_PCB* PCB_PARSER::parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
+DIMENSION* PCB_PARSER::parseDIMENSION()
 {
     wxCHECK_MSG( CurTok() == T_dimension, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as DIMENSION." ) );
@@ -1715,7 +1715,6 @@ DIMENSION* PCB_PARSER::parseDIMENSION() throw( IO_ERROR, PARSE_ERROR )
 
 
 MODULE* PCB_PARSER::parseMODULE( wxArrayString* aInitialComments )
-        throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR )
 {
     try
     {
@@ -1732,7 +1731,6 @@ MODULE* PCB_PARSER::parseMODULE( wxArrayString* aInitialComments )
 
 
 MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
-        throw( IO_ERROR, PARSE_ERROR )
 {
     wxCHECK_MSG( CurTok() == T_module, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as MODULE." ) );
@@ -1983,7 +1981,7 @@ MODULE* PCB_PARSER::parseMODULE_unchecked( wxArrayString* aInitialComments )
 }
 
 
-TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR )
+TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE()
 {
     wxCHECK_MSG( CurTok() == T_fp_text, NULL,
                  wxString::Format( wxT( "Cannot parse %s as TEXTE_MODULE at line %d, offset %d." ),
@@ -2068,7 +2066,7 @@ TEXTE_MODULE* PCB_PARSER::parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR )
+EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE()
 {
     wxCHECK_MSG( CurTok() == T_fp_arc || CurTok() == T_fp_circle || CurTok() == T_fp_curve ||
                  CurTok() == T_fp_line || CurTok() == T_fp_poly, NULL,
@@ -2235,7 +2233,7 @@ EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) throw( IO_ERROR, PARSE_ERROR )
+D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent )
 {
     wxCHECK_MSG( CurTok() == T_pad, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as D_PAD." ) );
@@ -2489,7 +2487,7 @@ D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent ) throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-TRACK* PCB_PARSER::parseTRACK() throw( IO_ERROR, PARSE_ERROR )
+TRACK* PCB_PARSER::parseTRACK()
 {
     wxCHECK_MSG( CurTok() == T_segment, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as TRACK." ) );
@@ -2555,7 +2553,7 @@ TRACK* PCB_PARSER::parseTRACK() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-VIA* PCB_PARSER::parseVIA() throw( IO_ERROR, PARSE_ERROR )
+VIA* PCB_PARSER::parseVIA()
 {
     wxCHECK_MSG( CurTok() == T_via, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as VIA." ) );
@@ -2638,7 +2636,7 @@ VIA* PCB_PARSER::parseVIA() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
+ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
 {
     wxCHECK_MSG( CurTok() == T_zone, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
@@ -3008,7 +3006,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
 }
 
 
-PCB_TARGET* PCB_PARSER::parsePCB_TARGET() throw( IO_ERROR, PARSE_ERROR )
+PCB_TARGET* PCB_PARSER::parsePCB_TARGET()
 {
     wxCHECK_MSG( CurTok() == T_target, NULL,
                  wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as PCB_TARGET." ) );
diff --git a/pcbnew/pcb_parser.h b/pcbnew/pcb_parser.h
index 068669ddb..86e5b52ef 100644
--- a/pcbnew/pcb_parser.h
+++ b/pcbnew/pcb_parser.h
@@ -102,21 +102,21 @@ class PCB_PARSER : public PCB_LEXER
      */
     void init();
 
-    void parseHeader() throw( IO_ERROR, PARSE_ERROR );
-    void parseGeneralSection() throw( IO_ERROR, PARSE_ERROR );
-    void parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR );
-    void parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR );
+    void parseHeader();
+    void parseGeneralSection();
+    void parsePAGE_INFO();
+    void parseTITLE_BLOCK();
 
-    void parseLayers() throw( IO_ERROR, PARSE_ERROR );
-    void parseLayer( LAYER* aLayer ) throw( IO_ERROR, PARSE_ERROR );
+    void parseLayers();
+    void parseLayer( LAYER* aLayer );
 
-    void parseSetup() throw( IO_ERROR, PARSE_ERROR );
-    void parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR );
-    void parseNETCLASS() throw( IO_ERROR, PARSE_ERROR );
+    void parseSetup();
+    void parseNETINFO_ITEM();
+    void parseNETCLASS();
 
-    DRAWSEGMENT*    parseDRAWSEGMENT() throw( IO_ERROR, PARSE_ERROR );
-    TEXTE_PCB*      parseTEXTE_PCB() throw( IO_ERROR, PARSE_ERROR );
-    DIMENSION*      parseDIMENSION() throw( IO_ERROR, PARSE_ERROR );
+    DRAWSEGMENT*    parseDRAWSEGMENT();
+    TEXTE_PCB*      parseTEXTE_PCB();
+    DIMENSION*      parseDIMENSION();
 
     /**
      * Function parseMODULE
@@ -124,29 +124,27 @@ class PCB_PARSER : public PCB_LEXER
      *   or NULL.  If not NULL, then caller has given ownership of a wxArrayString to
      *   this function and care must be taken to delete it even on exception.
      */
-    MODULE*         parseMODULE( wxArrayString* aInitialComments = 0 )
-                        throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR );
+    MODULE*         parseMODULE( wxArrayString* aInitialComments = 0 );
 
     /**
      * Function parseMODULE_unchecked
      * Parse a module, but do not replace PARSE_ERROR with FUTURE_FORMAT_ERROR automatically.
      */
-    MODULE*         parseMODULE_unchecked( wxArrayString* aInitialComments = 0 )
-                        throw( IO_ERROR, PARSE_ERROR );
-    TEXTE_MODULE*   parseTEXTE_MODULE() throw( IO_ERROR, PARSE_ERROR );
-    EDGE_MODULE*    parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR );
-    D_PAD*          parseD_PAD( MODULE* aParent = NULL ) throw( IO_ERROR, PARSE_ERROR );
-    TRACK*          parseTRACK() throw( IO_ERROR, PARSE_ERROR );
-    VIA*            parseVIA() throw( IO_ERROR, PARSE_ERROR );
-    ZONE_CONTAINER* parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR );
-    PCB_TARGET*     parsePCB_TARGET() throw( IO_ERROR, PARSE_ERROR );
-    BOARD*          parseBOARD() throw( IO_ERROR, PARSE_ERROR, FUTURE_FORMAT_ERROR );
+    MODULE*         parseMODULE_unchecked( wxArrayString* aInitialComments = 0 );
+    TEXTE_MODULE*   parseTEXTE_MODULE();
+    EDGE_MODULE*    parseEDGE_MODULE();
+    D_PAD*          parseD_PAD( MODULE* aParent = NULL );
+    TRACK*          parseTRACK();
+    VIA*            parseVIA();
+    ZONE_CONTAINER* parseZONE_CONTAINER();
+    PCB_TARGET*     parsePCB_TARGET();
+    BOARD*          parseBOARD();
 
     /**
      * Function parseBOARD_unchecked
      * Parse a module, but do not replace PARSE_ERROR with FUTURE_FORMAT_ERROR automatically.
      */
-    BOARD*          parseBOARD_unchecked() throw( IO_ERROR, PARSE_ERROR );
+    BOARD*          parseBOARD_unchecked();
 
 
     /**
@@ -160,7 +158,7 @@ class PCB_PARSER : public PCB_LEXER
      * @return int - The result of the parsed #BOARD_ITEM layer or set designator.
      */
     template<class T, class M>
-    T lookUpLayer( const M& aMap ) throw( PARSE_ERROR, IO_ERROR );
+    T lookUpLayer( const M& aMap );
 
     /**
      * Function parseBoardItemLayer
@@ -170,7 +168,7 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the layer syntax is incorrect.
      * @return The index the parsed #BOARD_ITEM layer.
      */
-    PCB_LAYER_ID parseBoardItemLayer() throw( IO_ERROR, PARSE_ERROR );
+    PCB_LAYER_ID parseBoardItemLayer();
 
     /**
      * Function parseBoardItemLayersAsMask
@@ -180,7 +178,7 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the layers syntax is incorrect.
      * @return The mask of layers the parsed #BOARD_ITEM is on.
      */
-    LSET parseBoardItemLayersAsMask() throw( PARSE_ERROR, IO_ERROR );
+    LSET parseBoardItemLayersAsMask();
 
     /**
      * Function parseXY
@@ -193,9 +191,9 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the coordinate pair syntax is incorrect.
      * @return A wxPoint object containing the coordinate pair.
      */
-    wxPoint parseXY() throw( PARSE_ERROR, IO_ERROR );
+    wxPoint parseXY();
 
-    void parseXY( int* aX, int* aY ) throw( PARSE_ERROR, IO_ERROR );
+    void parseXY( int* aX, int* aY );
 
     /**
      * Function parseEDA_TEXT
@@ -204,9 +202,9 @@ class PCB_PARSER : public PCB_LEXER
      * @throw PARSE_ERROR if the text syntax is not valid.
      * @param aText A point to the #EDA_TEXT object to save the parsed settings into.
      */
-    void parseEDA_TEXT( EDA_TEXT* aText ) throw( PARSE_ERROR, IO_ERROR );
+    void parseEDA_TEXT( EDA_TEXT* aText );
 
-    S3D_INFO* parse3DModel() throw( PARSE_ERROR, IO_ERROR );
+    S3D_INFO* parse3DModel();
 
     /**
      * Function parseDouble
@@ -216,20 +214,20 @@ class PCB_PARSER : public PCB_LEXER
      * @throw IO_ERROR if an error occurs attempting to convert the current token.
      * @return The result of the parsed token.
      */
-    double parseDouble() throw( IO_ERROR );
+    double parseDouble();
 
-    inline double parseDouble( const char* aExpected ) throw( IO_ERROR )
+    inline double parseDouble( const char* aExpected )
     {
         NeedNUMBER( aExpected );
         return parseDouble();
     }
 
-    inline double parseDouble( PCB_KEYS_T::T aToken ) throw( IO_ERROR )
+    inline double parseDouble( PCB_KEYS_T::T aToken )
     {
         return parseDouble( GetTokenText( aToken ) );
     }
 
-    inline int parseBoardUnits() throw( IO_ERROR )
+    inline int parseBoardUnits()
     {
         // There should be no major rounding issues here, since the values in
         // the file are in mm and get converted to nano-meters.
@@ -240,7 +238,7 @@ class PCB_PARSER : public PCB_LEXER
         return KiROUND( parseDouble() * IU_PER_MM );
     }
 
-    inline int parseBoardUnits( const char* aExpected ) throw( PARSE_ERROR, IO_ERROR )
+    inline int parseBoardUnits( const char* aExpected )
     {
         // Use here KiROUND, not KIROUND (see comments about them)
         // when having a function as argument, because it will be called twice
@@ -248,35 +246,35 @@ class PCB_PARSER : public PCB_LEXER
         return KiROUND( parseDouble( aExpected ) * IU_PER_MM );
     }
 
-    inline int parseBoardUnits( PCB_KEYS_T::T aToken ) throw( PARSE_ERROR, IO_ERROR )
+    inline int parseBoardUnits( PCB_KEYS_T::T aToken )
     {
         return parseBoardUnits( GetTokenText( aToken ) );
     }
 
-    inline int parseInt() throw( PARSE_ERROR )
+    inline int parseInt()
     {
         return (int)strtol( CurText(), NULL, 10 );
     }
 
-    inline int parseInt( const char* aExpected ) throw( PARSE_ERROR )
+    inline int parseInt( const char* aExpected )
     {
         NeedNUMBER( aExpected );
         return parseInt();
     }
 
-    inline long parseHex() throw( PARSE_ERROR )
+    inline long parseHex()
     {
         NextTok();
         return strtol( CurText(), NULL, 16 );
     }
 
-    bool parseBool() throw( PARSE_ERROR );
+    bool parseBool();
 
     /**
      * Parse a format version tag like (version 20160417) return the version.
      * Expects to start on 'version', and eats the closing paren.
      */
-    int parseVersion() throw( IO_ERROR, PARSE_ERROR );
+    int parseVersion();
 
 public:
 
@@ -308,7 +306,7 @@ public:
         m_board = aBoard;
     }
 
-    BOARD_ITEM* Parse() throw( IO_ERROR, PARSE_ERROR );
+    BOARD_ITEM* Parse();
 
     /**
      * Return whether a version number, if any was parsed, was too recent
diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp
index 32f943668..0431042c1 100644
--- a/pcbnew/pcb_plot_params.cpp
+++ b/pcbnew/pcb_plot_params.cpp
@@ -135,7 +135,7 @@ void PCB_PLOT_PARAMS::SetGerberPrecision( int aPrecision )
 
 // PLEASE NOTE: only plot dialog options are processed
 void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
-                              int aNestLevel, int aControl ) const throw( IO_ERROR )
+                              int aNestLevel, int aControl ) const
 {
     const char* falseStr = getTokenName( T_false );
     const char* trueStr = getTokenName( T_true );
@@ -215,7 +215,6 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
 
 
 void PCB_PLOT_PARAMS::Parse( PCB_PLOT_PARAMS_PARSER* aParser )
-                      throw( PARSE_ERROR, IO_ERROR )
 {
     aParser->Parse( this );
 }
@@ -337,7 +336,6 @@ PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( char* aLine, const wxString& aSo
 
 
 void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
-                             throw( PARSE_ERROR, IO_ERROR )
 {
     T   token;
 
@@ -559,7 +557,7 @@ double PCB_PLOT_PARAMS_PARSER::parseDouble()
     return val;
 }
 
-void PCB_PLOT_PARAMS_PARSER::skipCurrent() throw( IO_ERROR, PARSE_ERROR )
+void PCB_PLOT_PARAMS_PARSER::skipCurrent()
 {
     int curr_level = 0;
     T token;
diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h
index 6900356e1..5f44bce56 100644
--- a/pcbnew/pcb_plot_params.h
+++ b/pcbnew/pcb_plot_params.h
@@ -165,9 +165,8 @@ public:
     void        SetSkipPlotNPTH_Pads( bool aSkip ) { m_skipNPTH_Pads = aSkip; }
     bool        GetSkipPlotNPTH_Pads() const { return m_skipNPTH_Pads; }
 
-    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl=0 )
-                        const throw( IO_ERROR );
-    void        Parse( PCB_PLOT_PARAMS_PARSER* aParser ) throw( PARSE_ERROR, IO_ERROR );
+    void        Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl=0 ) const;
+    void        Parse( PCB_PLOT_PARAMS_PARSER* aParser );
 
     bool        operator==( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
     bool        operator!=( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
diff --git a/pcbnew/pcb_plot_params_parser.h b/pcbnew/pcb_plot_params_parser.h
index cc3137ea9..ed52129f7 100644
--- a/pcbnew/pcb_plot_params_parser.h
+++ b/pcbnew/pcb_plot_params_parser.h
@@ -41,7 +41,7 @@ public:
 
     LINE_READER* GetReader() { return reader; };
 
-    void Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( PARSE_ERROR, IO_ERROR );
+    void Parse( PCB_PLOT_PARAMS* aPcbPlotParams );
 
 private:
     bool parseBool();
@@ -67,7 +67,7 @@ private:
      * Skip the current token level, i.e
      * search for the RIGHT parenthesis which closes the current description
      */
-    void skipCurrent() throw( IO_ERROR, PARSE_ERROR );
+    void skipCurrent();
 };
 
 #endif // PCB_PLOT_PARAMS_PARSER_H_
diff --git a/pcbnew/specctra.cpp b/pcbnew/specctra.cpp
index e016af6a9..6bcd06098 100644
--- a/pcbnew/specctra.cpp
+++ b/pcbnew/specctra.cpp
@@ -131,7 +131,7 @@ int SPECCTRA_DB::findLayerName( const std::string& aLayerName ) const
     return -1;
 }
 
-void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id ) throw( IO_ERROR )
+void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id )
 {
     T      tok;
 
@@ -174,7 +174,7 @@ void SPECCTRA_DB::readCOMPnPIN( std::string* component_id, std::string* pin_id )
 }
 
 
-void SPECCTRA_DB::readTIME( time_t* time_stamp ) throw( IO_ERROR )
+void SPECCTRA_DB::readTIME( time_t* time_stamp )
 {
     T     tok;
 
@@ -240,7 +240,7 @@ void SPECCTRA_DB::readTIME( time_t* time_stamp ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::LoadPCB( const wxString& aFilename )
 {
     FILE_LINE_READER curr_reader( aFilename );
 
@@ -259,7 +259,7 @@ void SPECCTRA_DB::LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::b
 }
 
 
-void SPECCTRA_DB::LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::LoadSESSION( const wxString& aFilename )
 {
     FILE_LINE_READER curr_reader( aFilename );
 
@@ -279,7 +279,7 @@ void SPECCTRA_DB::LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boos
 }
 
 
-void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPCB( PCB* growth )
 {
     T     tok;
 
@@ -384,7 +384,7 @@ void SPECCTRA_DB::doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doPARSER( PARSER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPARSER( PARSER* growth )
 {
     T           tok;
     std::string const1;
@@ -523,7 +523,7 @@ void SPECCTRA_DB::doPARSER( PARSER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth )
 {
     T       tok = NextTok();
 
@@ -550,7 +550,7 @@ void SPECCTRA_DB::doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doUNIT( UNIT_RES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doUNIT( UNIT_RES* growth )
 {
     T       tok = NextTok();
 
@@ -571,7 +571,7 @@ void SPECCTRA_DB::doUNIT( UNIT_RES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth )
 {
     NeedSYMBOL();
     growth->layer_id0 = CurText();
@@ -588,7 +588,7 @@ void SPECCTRA_DB::doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO
 
 
 void SPECCTRA_DB::doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth )
-    throw( IO_ERROR, boost::bad_pointer )
+
 {
     T       tok;
 
@@ -607,7 +607,7 @@ void SPECCTRA_DB::doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth )
 }
 
 
-void SPECCTRA_DB::doSTRUCTURE( STRUCTURE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSTRUCTURE( STRUCTURE* growth )
 {
     T       tok;
 
@@ -741,7 +741,7 @@ L_place:
 }
 
 
-void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth )
 {
     /*
     <structure_out_descriptor >::=
@@ -784,7 +784,7 @@ void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boos
 }
 
 
-void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth )
 {
     T       tok = NextTok();
 
@@ -873,7 +873,7 @@ void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doCONNECT( CONNECT* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCONNECT( CONNECT* growth )
 {
     /*  from page 143 of specctra spec:
 
@@ -908,7 +908,7 @@ void SPECCTRA_DB::doCONNECT( CONNECT* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doWINDOW( WINDOW* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWINDOW( WINDOW* growth )
 {
     T       tok = NextTok();
 
@@ -960,7 +960,7 @@ void SPECCTRA_DB::doWINDOW( WINDOW* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth )
 {
     T       tok = NextTok();
 
@@ -987,7 +987,7 @@ void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_poi
             if( tok != T_path )
                 Expecting( T_path );
 
-            PATH* path = new PATH( growth, T_path ) ;
+            PATH* path = new PATH( growth, T_path );
             growth->paths.push_back( path );
 
             doPATH( path );
@@ -1007,7 +1007,7 @@ void SPECCTRA_DB::doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doPATH( PATH* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPATH( PATH* growth )
 {
     T tok = NextTok();
 
@@ -1055,7 +1055,7 @@ void SPECCTRA_DB::doPATH( PATH* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth )
 {
     NeedSYMBOL();
     growth->layer_id = CurText();
@@ -1080,7 +1080,7 @@ void SPECCTRA_DB::doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doCIRCLE( CIRCLE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCIRCLE( CIRCLE* growth )
 {
     T       tok;
 
@@ -1108,7 +1108,7 @@ void SPECCTRA_DB::doCIRCLE( CIRCLE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doQARC( QARC* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doQARC( QARC* growth )
 {
     NeedSYMBOL();
     growth->layer_id = CurText();
@@ -1132,7 +1132,7 @@ void SPECCTRA_DB::doQARC( QARC* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth )
 {
     NeedSYMBOL();
     growth->value = CurText();
@@ -1140,7 +1140,7 @@ void SPECCTRA_DB::doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doTOKPROP( TOKPROP* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doTOKPROP( TOKPROP* growth )
 {
     T     tok = NextTok();
 
@@ -1153,7 +1153,7 @@ void SPECCTRA_DB::doTOKPROP( TOKPROP* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doVIA( VIA* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doVIA( VIA* growth )
 {
     T       tok;
 
@@ -1182,7 +1182,7 @@ void SPECCTRA_DB::doVIA( VIA* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCONTROL( CONTROL* growth )
 {
     T       tok;
 
@@ -1217,7 +1217,7 @@ void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_point
         case T_microvia:
         case T_reroute_order_viols:
             TOKPROP* tokprop;
-            tokprop = new TOKPROP( growth, tok ) ;
+            tokprop = new TOKPROP( growth, tok );
             growth->Append( tokprop );
             doTOKPROP( tokprop );
             break;
@@ -1229,7 +1229,7 @@ void SPECCTRA_DB::doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth )
 {
     T           tok;
     PROPERTY    property;  // construct it once here, append multiple times.
@@ -1252,7 +1252,7 @@ void SPECCTRA_DB::doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLAYER( LAYER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doLAYER( LAYER* growth )
 {
     T       tok = NextTok();
 
@@ -1374,7 +1374,7 @@ void SPECCTRA_DB::doLAYER( LAYER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doRULE( RULE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doRULE( RULE* growth )
 {
     std::string     builder;
     int             bracketNesting = 1; // we already saw the opening T_LEFT
@@ -1420,7 +1420,7 @@ void SPECCTRA_DB::doRULE( RULE* growth ) throw( IO_ERROR )
 
 
 #if 0
-void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type ) throw( IO_ERROR )
+void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type )
 {
     /*   (place_rule [<structure_place_rule_object> ]
          {[<spacing_descriptor> |
@@ -1506,7 +1506,7 @@ void SPECCTRA_DB::doPLACE_RULE( PLACE_RULE* growth, bool expect_object_type ) th
 #endif
 
 
-void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doREGION( REGION* growth )
 {
     T     tok = NextTok();
 
@@ -1575,7 +1575,7 @@ void SPECCTRA_DB::doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth )
 {
     T       tok = NextTok();
 
@@ -1620,7 +1620,7 @@ void SPECCTRA_DB::doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::b
 }
 
 
-void SPECCTRA_DB::doCLASSES( CLASSES* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCLASSES( CLASSES* growth )
 {
     T       tok = NextTok();
 
@@ -1643,7 +1643,7 @@ void SPECCTRA_DB::doCLASSES( CLASSES* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doGRID( GRID* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doGRID( GRID* growth )
 {
     T       tok = NextTok();
 
@@ -1708,7 +1708,7 @@ void SPECCTRA_DB::doGRID( GRID* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth )
 {
     T       tok;
 
@@ -1733,7 +1733,7 @@ void SPECCTRA_DB::doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPLACE( PLACE* growth )
 {
     T       tok = NextTok();
 
@@ -1848,7 +1848,7 @@ void SPECCTRA_DB::doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth )
 {
     T       tok = NextTok();
 
@@ -1878,7 +1878,7 @@ void SPECCTRA_DB::doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_p
 }
 
 
-void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth )
 {
     T       tok;
 
@@ -1933,7 +1933,7 @@ void SPECCTRA_DB::doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_p
 }
 
 
-void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doPADSTACK( PADSTACK* growth )
 {
     T       tok = NextTok();
 
@@ -2033,7 +2033,7 @@ void SPECCTRA_DB::doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSHAPE( SHAPE* growth )
 {
     T       tok;
 
@@ -2117,7 +2117,7 @@ L_done_that:
 }
 
 
-void SPECCTRA_DB::doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doIMAGE( IMAGE* growth )
 {
     T       tok = NextTok();
 
@@ -2213,7 +2213,7 @@ void SPECCTRA_DB::doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doPIN( PIN* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doPIN( PIN* growth )
 {
     T       tok = NextTok();
 
@@ -2260,7 +2260,7 @@ void SPECCTRA_DB::doPIN( PIN* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doLIBRARY( LIBRARY* growth )
 {
     T       tok;
 
@@ -2314,7 +2314,7 @@ void SPECCTRA_DB::doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doNET( NET* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNET( NET* growth )
 {
     T           tok = NextTok();
     PIN_REFS*   pin_refs;
@@ -2454,7 +2454,7 @@ L_pins:
 }
 
 
-void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth )
 {
     T       tok;
 
@@ -2492,7 +2492,7 @@ void SPECCTRA_DB::doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_poi
 }
 
 
-void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doCLASS( CLASS* growth )
 {
     T       tok;
 
@@ -2602,7 +2602,7 @@ void SPECCTRA_DB::doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNETWORK( NETWORK* growth )
 {
     T       tok;
 
@@ -2647,7 +2647,7 @@ void SPECCTRA_DB::doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth )
 {
     T       tok;
 
@@ -2665,7 +2665,7 @@ void SPECCTRA_DB::doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doFROMTO( FROMTO* growth )
 {
     T       tok;
 
@@ -2751,7 +2751,7 @@ void SPECCTRA_DB::doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doWIRE( WIRE* growth )
 {
     T       tok;
 
@@ -2872,7 +2872,7 @@ void SPECCTRA_DB::doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth )
 {
     T       tok;
     POINT   point;
@@ -2976,7 +2976,7 @@ void SPECCTRA_DB::doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doWIRING( WIRING* growth )
 {
     T       tok;
 
@@ -3032,7 +3032,7 @@ void SPECCTRA_DB::doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer
 }
 
 
-void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth )
 {
     T       tok;
 
@@ -3070,7 +3070,7 @@ void SPECCTRA_DB::doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doHISTORY( HISTORY* growth )
 {
     T       tok;
 
@@ -3126,7 +3126,7 @@ void SPECCTRA_DB::doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doSESSION( SESSION* growth )
 {
     T       tok;
 
@@ -3203,7 +3203,7 @@ void SPECCTRA_DB::doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doWAS_IS( WAS_IS* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doWAS_IS( WAS_IS* growth )
 {
     T           tok;
     PIN_PAIR    empty( growth );
@@ -3244,7 +3244,7 @@ void SPECCTRA_DB::doWAS_IS( WAS_IS* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doROUTE( ROUTE* growth )
 {
     T       tok;
 
@@ -3327,7 +3327,7 @@ void SPECCTRA_DB::doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer )
 }
 
 
-void SPECCTRA_DB::doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_pointer )
+void SPECCTRA_DB::doNET_OUT( NET_OUT* growth )
 {
     T       tok;
 
@@ -3395,7 +3395,7 @@ void SPECCTRA_DB::doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_point
 }
 
 
-void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR )
+void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth )
 {
     T       tok;
     PIN_REF empty(growth);
@@ -3431,7 +3431,7 @@ void SPECCTRA_DB::doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR )
 }
 
 
-void SPECCTRA_DB::ExportPCB( wxString aFilename, bool aNameChange ) throw( IO_ERROR )
+void SPECCTRA_DB::ExportPCB( wxString aFilename, bool aNameChange )
 {
     if( pcb )
     {
@@ -3508,7 +3508,7 @@ UNIT_RES* ELEM::GetUnits() const
 }
 
 
-void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     out->Print( nestLevel, "(%s\n", Name() );
 
@@ -3518,7 +3518,7 @@ void ELEM::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
 }
 
 
-void ELEM_HOLDER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void ELEM_HOLDER::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     for( int i=0;  i<Length();  ++i )
     {
@@ -3631,7 +3631,7 @@ PARSER::PARSER( ELEM* aParent ) :
 }
 
 
-void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel )
 {
     out->Print( nestLevel, "(string_quote %c)\n", string_quote );
     out->Print( nestLevel, "(space_in_quoted_tokens %s)\n", space_in_quoted_tokens ? "on" : "off" );
@@ -3667,7 +3667,7 @@ void PARSER::FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERR
 }
 
 
-void PLACE::Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+void PLACE::Format( OUTPUTFORMATTER* out, int nestLevel )
 {
     bool        useMultiLine;
 
diff --git a/pcbnew/specctra.h b/pcbnew/specctra.h
index cb814a876..9b0340a2d 100644
--- a/pcbnew/specctra.h
+++ b/pcbnew/specctra.h
@@ -149,7 +149,7 @@ struct POINT
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const
     {
         out->Print( nestLevel, " %.6g %.6g", x, y );
     }
@@ -171,7 +171,7 @@ struct PROPERTY
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) const throw( IO_ERROR )
+    void Format( OUTPUTFORMATTER* out, int nestLevel ) const
     {
         const char* quoteName  = out->GetQuoteChar( name.c_str() );
         const char* quoteValue = out->GetQuoteChar( value.c_str() );
@@ -249,7 +249,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR );
+    virtual void Format( OUTPUTFORMATTER* out, int nestLevel );
 
 
     /**
@@ -261,7 +261,7 @@ public:
      * @param nestLevel A multiple of the number of spaces to preceed the output with.
      * @throw IO_ERROR if a system error writing the output, such as a full disk.
      */
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel )
     {
         // overridden in ELEM_HOLDER
     }
@@ -293,7 +293,7 @@ public:
     {
     }
 
-    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    virtual void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override;
 
 
     //-----< list operations >--------------------------------------------
@@ -389,7 +389,7 @@ public:
 
     PARSER( ELEM* aParent );
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override;
 };
 
 
@@ -423,7 +423,7 @@ public:
     DSN_T   GetEngUnits() const  { return units; }
     int     GetValue() const  { return value; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( type == T_unit )
             out->Print( nestLevel, "(%s %s)\n", Name(),
@@ -469,7 +469,7 @@ public:
     POINT GetOrigin() { return point0; }
     POINT GetEnd() { return point1; }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -502,7 +502,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -548,7 +548,7 @@ public:
         delete rule;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -609,7 +609,7 @@ public:
         aperture_width = aWidth;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -702,7 +702,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -735,7 +735,7 @@ public:
         diameter = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -782,7 +782,7 @@ public:
         aperture_width = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = nestLevel ? "\n" : "";
 
@@ -864,7 +864,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -947,7 +947,7 @@ public:
         windows.push_back( aWindow );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* newline = "\n";
 
@@ -1024,7 +1024,7 @@ public:
         padstacks.push_back( aViaName );
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const int RIGHTMARGIN = 80;
         int perLine = out->Print( nestLevel, "(%s", Name() );
@@ -1078,7 +1078,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( STRINGS::iterator i=class_ids.begin();  i!=class_ids.end();  ++i )
         {
@@ -1117,7 +1117,7 @@ public:
         delete classes;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( classes )
             classes->Format( out, nestLevel );
@@ -1147,7 +1147,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1202,7 +1202,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( name.c_str() );
 
@@ -1276,7 +1276,7 @@ public:
         layer_weight = 0.0;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote0 = out->GetQuoteChar( layer_id0.c_str() );
         const char* quote1 = out->GetQuoteChar( layer_id1.c_str() );
@@ -1303,7 +1303,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s\n", Name() );
 
@@ -1351,7 +1351,7 @@ public:
         value = T_NONE;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s %s)\n", Name(),
                    GetTokenText( value ) );
@@ -1377,7 +1377,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( value.c_str() );
 
@@ -1420,7 +1420,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( region_id.size() )
         {
@@ -1464,7 +1464,7 @@ public:
         image_type= T_NONE;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s %s %.6g",
                    Name(),
@@ -1508,7 +1508,7 @@ public:
         delete rules;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( LAYERS::iterator i=layers.begin();  i!=layers.end();  ++i )
             i->Format( out, nestLevel );
@@ -1592,7 +1592,7 @@ public:
             place_boundary->SetParent( this );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1724,7 +1724,7 @@ public:
         rotation = aRotation;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override;
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override;
 };
 typedef boost::ptr_vector<PLACE>    PLACES;
 
@@ -1761,7 +1761,7 @@ public:
      */
 //    static int Compare( IMAGE* lhs, IMAGE* rhs );
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( image_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
@@ -1772,7 +1772,7 @@ public:
         out->Print( nestLevel, ")\n" );
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( PLACES::iterator i=places.begin();  i!=places.end();  ++i )
             i->Format( out, nestLevel );
@@ -1825,7 +1825,7 @@ public:
         return added;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -1891,7 +1891,7 @@ public:
         connect = aConnect;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -1950,7 +1950,7 @@ public:
         vertex.FixNegativeZero();
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
         if( isRotated )
@@ -2035,7 +2035,7 @@ public:
         return image_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         std::string imageId = GetImageId();
 
@@ -2050,7 +2050,7 @@ public:
     }
 
     // this is here for makeHash()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( side != T_both )
             out->Print( 0, " (side %s)", GetTokenText( side ) );
@@ -2150,7 +2150,7 @@ public:
         padstack_id = aPadstackId;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -2164,7 +2164,7 @@ public:
 
 
     // this factored out for use by Compare()
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2393,7 +2393,7 @@ public:
         return NULL;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -2438,7 +2438,7 @@ struct PIN_REF : public ELEM
      * is like Format() but is not virual and returns the number of characters
      * that were output.
      */
-    int FormatIt( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR )
+    int FormatIt( OUTPUTFORMATTER* out, int nestLevel )
     {
         // only print the newline if there is a nest level, and make
         // the quotes unconditional on this one.
@@ -2482,7 +2482,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         // no quoting on these two, the lexer preserved the quotes on input
         out->Print( nestLevel, "(%s %s %s ",
@@ -2540,7 +2540,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s", Name() );
 
@@ -2623,7 +2623,7 @@ public:
         return -1;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
         const char* space = " ";
@@ -2700,7 +2700,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( FROMTOS::iterator i=fromtos.begin();  i!=fromtos.end();  ++i )
             i->Format( out, nestLevel );
@@ -2747,7 +2747,7 @@ public:
     }
 
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( class_id.c_str() );
 
@@ -2816,7 +2816,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( NETS::iterator i=nets.begin();  i!=nets.end();  ++i )
             i->Format( out, nestLevel );
@@ -2897,7 +2897,7 @@ public:
         }
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         out->Print( nestLevel, "(%s ", Name() );
 
@@ -2981,7 +2981,7 @@ public:
         return padstack_id;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( padstack_id.c_str() );
 
@@ -3107,7 +3107,7 @@ public:
         delete unit;
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( unit )
             unit->Format( out, nestLevel );
@@ -3170,7 +3170,7 @@ public:
         delete wiring;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( pcbname.c_str() );
 
@@ -3233,7 +3233,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         char    temp[80];
         struct  tm* tmp;
@@ -3277,7 +3277,7 @@ public:
         time_stamp = time(NULL);
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( ANCESTORS::iterator i=ancestors.begin();  i!=ancestors.end();  ++i )
             i->Format( out, nestLevel );
@@ -3320,7 +3320,7 @@ public:
     {
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         bool singleLine = pin_refs.size() <= 1;
         out->Print( nestLevel, "(%s", Name() );
@@ -3379,7 +3379,7 @@ public:
         delete rules;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( net_id.c_str() );
 
@@ -3446,7 +3446,7 @@ public:
         return ELEM::GetUnits();
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         if( resolution )
             resolution->Format( out, nestLevel );
@@ -3509,7 +3509,7 @@ public:
     {
     }
 
-    void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void FormatContents( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         for( PIN_PAIRS::iterator i=pin_pairs.begin();  i!=pin_pairs.end();  ++i )
         {
@@ -3566,7 +3566,7 @@ public:
         delete route;
     }
 
-    void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IO_ERROR ) override
+    void Format( OUTPUTFORMATTER* out, int nestLevel )  override
     {
         const char* quote = out->GetQuoteChar( session_id.c_str() );
         out->Print( nestLevel, "(%s %s%s%s\n", Name(),
@@ -3676,7 +3676,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @throw IO_ERROR, if the next token or two do no make up a pin_reference,
      * or there is an error reading from the input stream.
      */
-    void readCOMPnPIN( std::string* component_id, std::string* pid_id ) throw( IO_ERROR );
+    void readCOMPnPIN( std::string* component_id, std::string* pid_id );
 
     /**
      * Function readTIME
@@ -3692,60 +3692,60 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @throw IO_ERROR, if the next token or 8 do no make up a time stamp,
      * or there is an error reading from the input stream.
      */
-    void readTIME( time_t* time_stamp ) throw( IO_ERROR );
-
-    void doPCB( PCB* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPARSER( PARSER* growth ) throw( IO_ERROR );
-    void doRESOLUTION( UNIT_RES* growth ) throw( IO_ERROR );
-    void doUNIT( UNIT_RES* growth ) throw( IO_ERROR );
-    void doSTRUCTURE( STRUCTURE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth ) throw( IO_ERROR );
-    void doBOUNDARY( BOUNDARY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doRECTANGLE( RECTANGLE* growth ) throw( IO_ERROR );
-    void doPATH( PATH* growth ) throw( IO_ERROR );
-    void doSTRINGPROP( STRINGPROP* growth ) throw( IO_ERROR );
-    void doTOKPROP( TOKPROP* growth ) throw( IO_ERROR );
-    void doVIA( VIA* growth ) throw( IO_ERROR );
-    void doCONTROL( CONTROL* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER( LAYER* growth ) throw( IO_ERROR );
-    void doRULE( RULE* growth ) throw( IO_ERROR );
-    void doKEEPOUT( KEEPOUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCIRCLE( CIRCLE* growth ) throw( IO_ERROR );
-    void doQARC( QARC* growth ) throw( IO_ERROR );
-    void doWINDOW( WINDOW* growth ) throw( IO_ERROR );
-    void doCONNECT( CONNECT* growth ) throw( IO_ERROR );
-    void doREGION( REGION* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCLASS_CLASS( CLASS_CLASS* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLAYER_RULE( LAYER_RULE* growth ) throw( IO_ERROR );
-    void doCLASSES( CLASSES* growth ) throw( IO_ERROR );
-    void doGRID( GRID* growth ) throw( IO_ERROR );
-    void doPLACE( PLACE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCOMPONENT( COMPONENT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPLACEMENT( PLACEMENT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPROPERTIES( PROPERTIES* growth ) throw( IO_ERROR );
-    void doPADSTACK( PADSTACK* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSHAPE( SHAPE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doIMAGE( IMAGE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doLIBRARY( LIBRARY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doPIN( PIN* growth ) throw( IO_ERROR );
-    void doNET( NET* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doNETWORK( NETWORK* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCLASS( CLASS* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doTOPOLOGY( TOPOLOGY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doFROMTO( FROMTO* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doCOMP_ORDER( COMP_ORDER* growth ) throw( IO_ERROR );
-    void doWIRE( WIRE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doWIRE_VIA( WIRE_VIA* growth ) throw( IO_ERROR );
-    void doWIRING( WIRING* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSESSION( SESSION* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doANCESTOR( ANCESTOR* growth ) throw( IO_ERROR );
-    void doHISTORY( HISTORY* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doROUTE( ROUTE* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doWAS_IS( WAS_IS* growth ) throw( IO_ERROR );
-    void doNET_OUT( NET_OUT* growth ) throw( IO_ERROR, boost::bad_pointer );
-    void doSUPPLY_PIN( SUPPLY_PIN* growth ) throw( IO_ERROR );
+    void readTIME( time_t* time_stamp );
+
+    void doPCB( PCB* growth );
+    void doPARSER( PARSER* growth );
+    void doRESOLUTION( UNIT_RES* growth );
+    void doUNIT( UNIT_RES* growth );
+    void doSTRUCTURE( STRUCTURE* growth );
+    void doSTRUCTURE_OUT( STRUCTURE_OUT* growth );
+    void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth );
+    void doSPECCTRA_LAYER_PAIR( SPECCTRA_LAYER_PAIR* growth );
+    void doBOUNDARY( BOUNDARY* growth );
+    void doRECTANGLE( RECTANGLE* growth );
+    void doPATH( PATH* growth );
+    void doSTRINGPROP( STRINGPROP* growth );
+    void doTOKPROP( TOKPROP* growth );
+    void doVIA( VIA* growth );
+    void doCONTROL( CONTROL* growth );
+    void doLAYER( LAYER* growth );
+    void doRULE( RULE* growth );
+    void doKEEPOUT( KEEPOUT* growth );
+    void doCIRCLE( CIRCLE* growth );
+    void doQARC( QARC* growth );
+    void doWINDOW( WINDOW* growth );
+    void doCONNECT( CONNECT* growth );
+    void doREGION( REGION* growth );
+    void doCLASS_CLASS( CLASS_CLASS* growth );
+    void doLAYER_RULE( LAYER_RULE* growth );
+    void doCLASSES( CLASSES* growth );
+    void doGRID( GRID* growth );
+    void doPLACE( PLACE* growth );
+    void doCOMPONENT( COMPONENT* growth );
+    void doPLACEMENT( PLACEMENT* growth );
+    void doPROPERTIES( PROPERTIES* growth );
+    void doPADSTACK( PADSTACK* growth );
+    void doSHAPE( SHAPE* growth );
+    void doIMAGE( IMAGE* growth );
+    void doLIBRARY( LIBRARY* growth );
+    void doPIN( PIN* growth );
+    void doNET( NET* growth );
+    void doNETWORK( NETWORK* growth );
+    void doCLASS( CLASS* growth );
+    void doTOPOLOGY( TOPOLOGY* growth );
+    void doFROMTO( FROMTO* growth );
+    void doCOMP_ORDER( COMP_ORDER* growth );
+    void doWIRE( WIRE* growth );
+    void doWIRE_VIA( WIRE_VIA* growth );
+    void doWIRING( WIRING* growth );
+    void doSESSION( SESSION* growth );
+    void doANCESTOR( ANCESTOR* growth );
+    void doHISTORY( HISTORY* growth );
+    void doROUTE( ROUTE* growth );
+    void doWAS_IS( WAS_IS* growth );
+    void doNET_OUT( NET_OUT* growth );
+    void doSUPPLY_PIN( SUPPLY_PIN* growth );
 
     //-----<FromBOARD>-------------------------------------------------------
 
@@ -3756,7 +3756,7 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * @param aBoard The BOARD to get information from in order to make the BOUNDARY.
      * @param aBoundary The empty BOUNDARY to fill in.
      */
-    void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary ) throw( IO_ERROR, boost::bad_pointer );
+    void fillBOUNDARY( BOARD* aBoard, BOUNDARY* aBoundary );
 
     /**
      * Function makeIMAGE
@@ -3826,15 +3826,14 @@ class SPECCTRA_DB : public SPECCTRA_LEXER
      * Function makeTRACK
      * creates a TRACK form the PATH and BOARD info.
      */
-    TRACK* makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) throw( IO_ERROR );
+    TRACK* makeTRACK( PATH* aPath, int aPointIndex, int aNetcode );
 
     /**
      * Function makeVIA
      * instantiates a KiCad VIA on the heap and initializes it with internal
      * values consistent with the given PADSTACK, POINT, and netcode.
      */
-    ::VIA* makeVIA( PADSTACK* aPadstack, const POINT& aPoint, int aNetCode, int aViaDrillDefault )
-        throw( IO_ERROR );
+    ::VIA* makeVIA( PADSTACK* aPadstack, const POINT& aPoint, int aNetCode, int aViaDrillDefault );
 
     //-----</FromSESSION>----------------------------------------------------
 
@@ -3906,7 +3905,7 @@ public:
      * @param aFilename The name of the dsn file to load.
      * @throw IO_ERROR if there is a lexer or parser error.
      */
-    void LoadPCB( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer );
+    void LoadPCB( const wxString& aFilename );
 
     /**
      * Function LoadSESSION
@@ -3918,7 +3917,7 @@ public:
      * @param aFilename The name of the dsn file to load.
      * @throw IO_ERROR if there is a lexer or parser error.
      */
-    void LoadSESSION( const wxString& aFilename ) throw( IO_ERROR, boost::bad_pointer );
+    void LoadSESSION( const wxString& aFilename );
 
     /**
      * Function ExportPCB
@@ -3929,7 +3928,7 @@ public:
      *          and also to to be changed in the output file.
      * @throw IO_ERROR, if an i/o error occurs saving the file.
      */
-    void ExportPCB( wxString aFilename,  bool aNameChange=false ) throw( IO_ERROR );
+    void ExportPCB( wxString aFilename,  bool aNameChange=false );
 
     /**
      * Function FromBOARD
@@ -3942,7 +3941,7 @@ public:
      *
      * @param aBoard The BOARD to convert to a PCB.
      */
-    void FromBOARD( BOARD* aBoard ) throw( IO_ERROR, boost::bad_ptr_container_operation );
+    void FromBOARD( BOARD* aBoard );
 
     /**
      * Function FromSESSION
@@ -3952,7 +3951,7 @@ public:
      *
      * @param aBoard The BOARD to merge the SESSION information into.
      */
-    void FromSESSION( BOARD* aBoard ) throw( IO_ERROR );
+    void FromSESSION( BOARD* aBoard );
 
     /**
      * Function ExportSESSION
diff --git a/pcbnew/specctra_export.cpp b/pcbnew/specctra_export.cpp
index 662fcafe1..0618598f4 100644
--- a/pcbnew/specctra_export.cpp
+++ b/pcbnew/specctra_export.cpp
@@ -729,7 +729,6 @@ PADSTACK* SPECCTRA_DB::makeVia( const ::VIA* aVia )
 
 
 void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary )
-    throw( IO_ERROR, boost::bad_pointer )
 {
     wxString errMessage;
     SHAPE_POLY_SET outlines;
@@ -789,7 +788,6 @@ typedef std::pair<STRINGSET::iterator, bool>    STRINGSET_PAIR;
 
 
 void SPECCTRA_DB::FromBOARD( BOARD* aBoard )
-    throw( IO_ERROR, boost::bad_ptr_container_operation )
 {
     PCB_TYPE_COLLECTOR     items;
 
diff --git a/pcbnew/specctra_import.cpp b/pcbnew/specctra_import.cpp
index 09a39f9a7..2d8da4b77 100644
--- a/pcbnew/specctra_import.cpp
+++ b/pcbnew/specctra_import.cpp
@@ -197,7 +197,7 @@ static wxPoint mapPt( const POINT& aPoint, UNIT_RES* aResolution )
 }
 
 
-TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) throw( IO_ERROR )
+TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode )
 {
     int layerNdx = findLayerName( aPath->layer_id );
 
@@ -222,7 +222,6 @@ TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) thro
 
 ::VIA* SPECCTRA_DB::makeVIA( PADSTACK* aPadstack, const POINT& aPoint,
             int aNetCode, int aViaDrillDefault )
-    throw( IO_ERROR )
 {
     ::VIA*  via = 0;
     SHAPE*  shape;
@@ -358,7 +357,7 @@ TRACK* SPECCTRA_DB::makeTRACK( PATH* aPath, int aPointIndex, int aNetcode ) thro
 // no UI code in this function, throw exception to report problems to the
 // UI handler: void PCB_EDIT_FRAME::ImportSpecctraSession( wxCommandEvent& event )
 
-void SPECCTRA_DB::FromSESSION( BOARD* aBoard ) throw( IO_ERROR )
+void SPECCTRA_DB::FromSESSION( BOARD* aBoard )
 {
     sessionBoard = aBoard;      // not owned here
 
diff --git a/tools/io_benchmark/stdstream_line_reader.cpp b/tools/io_benchmark/stdstream_line_reader.cpp
index a45131b86..8fe530db7 100644
--- a/tools/io_benchmark/stdstream_line_reader.cpp
+++ b/tools/io_benchmark/stdstream_line_reader.cpp
@@ -41,7 +41,7 @@ STDISTREAM_LINE_READER::~STDISTREAM_LINE_READER()
 }
 
 
-char* STDISTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
+char* STDISTREAM_LINE_READER::ReadLine()
 {
     getline( *m_stream, m_buffer );
 
@@ -67,7 +67,7 @@ void STDISTREAM_LINE_READER::setStream( std::istream& aStream )
 }
 
 
-IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR ) :
+IFSTREAM_LINE_READER::IFSTREAM_LINE_READER( const wxFileName& aFileName )  :
         m_fStream( aFileName.GetFullName().ToUTF8() )
 {
     if( !m_fStream.is_open() )
diff --git a/tools/io_benchmark/stdstream_line_reader.h b/tools/io_benchmark/stdstream_line_reader.h
index 2cee6090c..5ccf86f3c 100644
--- a/tools/io_benchmark/stdstream_line_reader.h
+++ b/tools/io_benchmark/stdstream_line_reader.h
@@ -42,7 +42,7 @@ public:
 
     ~STDISTREAM_LINE_READER();
 
-    char* ReadLine() throw( IO_ERROR ) override;
+    char* ReadLine()  override;
 
 protected:
 
@@ -61,7 +61,7 @@ class IFSTREAM_LINE_READER : public STDISTREAM_LINE_READER
 {
 public:
 
-    IFSTREAM_LINE_READER( const wxFileName& aFileName ) throw( IO_ERROR );
+    IFSTREAM_LINE_READER( const wxFileName& aFileName );
 
     void Rewind();
 
-- 
2.13.0


Follow ups

References