From 55534dc5b1874813249f17efe042294b01b8bd27 Mon Sep 17 00:00:00 2001
From: Ben Longbons <b.r.longbons@gmail.com>
Date: Wed, 15 Oct 2014 17:07:23 -0700
Subject: Remove the need for empty source files to check headers

---
 Makefile.in                   |  7 +++++++
 src/compat/borrow.cpp         | 26 -------------------------
 src/compat/cast.cpp           | 26 -------------------------
 src/compat/iter.cpp           | 26 -------------------------
 src/compat/memory.cpp         | 26 -------------------------
 src/compat/option.cpp         | 26 -------------------------
 src/compat/rawmem.cpp         | 26 -------------------------
 src/compat/time_t.cpp         | 26 -------------------------
 src/generic/array.cpp         | 26 -------------------------
 src/generic/db.cpp            | 26 -------------------------
 src/generic/dumb_ptr.cpp      | 26 -------------------------
 src/generic/enum.cpp          | 26 -------------------------
 src/generic/intern-pool.cpp   | 26 -------------------------
 src/generic/matrix.cpp        | 26 -------------------------
 src/generic/operators.cpp     | 26 -------------------------
 src/ints/cmp.cpp              | 26 -------------------------
 src/ints/little.cpp           | 26 -------------------------
 src/ints/udl.cpp              | 26 -------------------------
 src/ints/wrap.cpp             | 26 -------------------------
 src/io/cxxstdio.cpp           | 26 -------------------------
 src/io/cxxstdio_enums.cpp     | 26 -------------------------
 src/io/tty.cpp                | 27 --------------------------
 src/map/magic-expr-eval.cpp   | 29 ----------------------------
 src/map/magic-interpreter.cpp | 29 ----------------------------
 src/map/script-buffer.cpp     | 30 -----------------------------
 src/map/script-persist.cpp    | 30 -----------------------------
 src/mmo/consts.cpp            | 26 -------------------------
 src/mmo/enums.cpp             | 26 -------------------------
 src/mmo/extract_enums.cpp     | 26 -------------------------
 src/mmo/human_time_diff.cpp   | 26 -------------------------
 src/mmo/ids.cpp               | 26 -------------------------
 src/mmo/mmo.cpp               | 26 -------------------------
 src/mmo/strs.cpp              | 26 -------------------------
 src/range/slice.cpp           | 26 -------------------------
 src/sexpr/bind.cpp            | 29 ----------------------------
 src/sexpr/union.cpp           | 44 -------------------------------------------
 src/sexpr/union_test.cpp      | 44 +++++++++++++++++++++++++++++++++++++++++++
 src/sexpr/variant.cpp         | 40 ---------------------------------------
 src/sexpr/void.cpp            | 29 ----------------------------
 src/strings/vstring.cpp       | 29 ----------------------------
 src/tests/fdhack.cpp          | 26 -------------------------
 tools/protocol.py             | 29 ----------------------------
 42 files changed, 51 insertions(+), 1099 deletions(-)
 delete mode 100644 src/compat/borrow.cpp
 delete mode 100644 src/compat/cast.cpp
 delete mode 100644 src/compat/iter.cpp
 delete mode 100644 src/compat/memory.cpp
 delete mode 100644 src/compat/option.cpp
 delete mode 100644 src/compat/rawmem.cpp
 delete mode 100644 src/compat/time_t.cpp
 delete mode 100644 src/generic/array.cpp
 delete mode 100644 src/generic/db.cpp
 delete mode 100644 src/generic/dumb_ptr.cpp
 delete mode 100644 src/generic/enum.cpp
 delete mode 100644 src/generic/intern-pool.cpp
 delete mode 100644 src/generic/matrix.cpp
 delete mode 100644 src/generic/operators.cpp
 delete mode 100644 src/ints/cmp.cpp
 delete mode 100644 src/ints/little.cpp
 delete mode 100644 src/ints/udl.cpp
 delete mode 100644 src/ints/wrap.cpp
 delete mode 100644 src/io/cxxstdio.cpp
 delete mode 100644 src/io/cxxstdio_enums.cpp
 delete mode 100644 src/io/tty.cpp
 delete mode 100644 src/map/magic-expr-eval.cpp
 delete mode 100644 src/map/magic-interpreter.cpp
 delete mode 100644 src/map/script-buffer.cpp
 delete mode 100644 src/map/script-persist.cpp
 delete mode 100644 src/mmo/consts.cpp
 delete mode 100644 src/mmo/enums.cpp
 delete mode 100644 src/mmo/extract_enums.cpp
 delete mode 100644 src/mmo/human_time_diff.cpp
 delete mode 100644 src/mmo/ids.cpp
 delete mode 100644 src/mmo/mmo.cpp
 delete mode 100644 src/mmo/strs.cpp
 delete mode 100644 src/range/slice.cpp
 delete mode 100644 src/sexpr/bind.cpp
 delete mode 100644 src/sexpr/union.cpp
 create mode 100644 src/sexpr/union_test.cpp
 delete mode 100644 src/sexpr/variant.cpp
 delete mode 100644 src/sexpr/void.cpp
 delete mode 100644 src/strings/vstring.cpp
 delete mode 100644 src/tests/fdhack.cpp

diff --git a/Makefile.in b/Makefile.in
index 3f98706..ae609ee 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -196,6 +196,7 @@ PIES := $(shell cd ${SRC_DIR}; find src/ -name '*.py')
 PIES := $(filter-out src/main-gdb-%.py,${PIES})
 SOURCES := ${REAL_SOURCES}
 HEADERS := ${REAL_HEADERS}
+CHECK_HEADERS := $(patsubst src/%.hpp,obj/%.hpp.check,$(filter %.hpp,${REAL_HEADERS}))
 PATTERN_ROOTS := $(patsubst src/%.cpp,%,${SOURCES})
 PATTERN_MAINS := $(patsubst %/main,%,$(filter %/main,${PATTERN_ROOTS}))
 PATTERN_LIBS := $(patsubst %/lib,%,$(filter %/lib,${PATTERN_ROOTS}))
@@ -427,6 +428,10 @@ obj/%.pdc.o: src/%.cpp
 obj/%.pic.o: src/%.cpp
 	$(MKDIR_FIRST)
 	$c ${CXX} ${CPPFLAGS} ${CXXFLAGS} -fPIC -c -o $@ $<
+obj/%.hpp.check: src/%.hpp
+	$(MKDIR_FIRST)
+	echo '#include "$<"' | ${CXX} ${CPPFLAGS} ${CXXFLAGS} -x c++ -fsyntax-only -
+	touch $@
 
 bin/%-gdb.py: src/main-gdb-head.py src/main-gdb-tail.py
 	$(MKDIR_FIRST)
@@ -474,9 +479,11 @@ obj/run-test-debug-debug.stamp:
 endif
 
 test: $(patsubst bin/%,obj/run-%.stamp,${TEST_BINARIES})
+test: test-headers
 obj/run-%.stamp: bin/%
 	${TESTER} $< ${TEST_ARGS}
 	touch $@
+test-headers: ${CHECK_HEADERS}
 
 install := install
 install_exe := ${install}
diff --git a/src/compat/borrow.cpp b/src/compat/borrow.cpp
deleted file mode 100644
index aac1c0c..0000000
--- a/src/compat/borrow.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "borrow.hpp"
-//    borrow.cpp - a non-null, unowned, pointer
-//
-//    Copyright © 2012-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/cast.cpp b/src/compat/cast.cpp
deleted file mode 100644
index 482529d..0000000
--- a/src/compat/cast.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "cast.hpp"
-//    cast.cpp - Change the type of a variable.
-//
-//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/iter.cpp b/src/compat/iter.cpp
deleted file mode 100644
index b6d6b63..0000000
--- a/src/compat/iter.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "iter.hpp"
-//    iter.cpp - tools for dealing with iterators
-//
-//    Copyright © 2012-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/memory.cpp b/src/compat/memory.cpp
deleted file mode 100644
index f9f2c22..0000000
--- a/src/compat/memory.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "memory.hpp"
-//    memory.cpp - I forget ...
-//
-//    Copyright © 2013-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/option.cpp b/src/compat/option.cpp
deleted file mode 100644
index ef9e31c..0000000
--- a/src/compat/option.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "option.hpp"
-//    option.cpp - a data type that may or may not exist
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/rawmem.cpp b/src/compat/rawmem.cpp
deleted file mode 100644
index d322437..0000000
--- a/src/compat/rawmem.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "rawmem.hpp"
-//    rawmem.cpp - Ignore poisoning and really frob this memory unsafely.
-//
-//    Copyright © 2013-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/compat/time_t.cpp b/src/compat/time_t.cpp
deleted file mode 100644
index ee0bbde..0000000
--- a/src/compat/time_t.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "time_t.hpp"
-//    time_t.cpp - time_t with a reliable representation
-//
-//    Copyright © 2013-2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/array.cpp b/src/generic/array.cpp
deleted file mode 100644
index 3063569..0000000
--- a/src/generic/array.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "array.hpp"
-//    array.cpp - A simple bounds-checked array.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/db.cpp b/src/generic/db.cpp
deleted file mode 100644
index 458068c..0000000
--- a/src/generic/db.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "db.hpp"
-//    db.cpp - convenience wrappers over std::map<K, V>
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/dumb_ptr.cpp b/src/generic/dumb_ptr.cpp
deleted file mode 100644
index e690f7d..0000000
--- a/src/generic/dumb_ptr.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "dumb_ptr.hpp"
-//    dumb_ptr.cpp - dummy file to make Make dependencies work
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/enum.cpp b/src/generic/enum.cpp
deleted file mode 100644
index 49402e9..0000000
--- a/src/generic/enum.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "enum.hpp"
-//    enum.cpp - Safe building blocks for enumerated types.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/intern-pool.cpp b/src/generic/intern-pool.cpp
deleted file mode 100644
index f45b098..0000000
--- a/src/generic/intern-pool.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "intern-pool.hpp"
-//    intern-pool.cpp - Cached integer/string lookups.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/matrix.cpp b/src/generic/matrix.cpp
deleted file mode 100644
index b14ab7d..0000000
--- a/src/generic/matrix.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "matrix.hpp"
-//    matrix.cpp - A 2D array.
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/generic/operators.cpp b/src/generic/operators.cpp
deleted file mode 100644
index 614ae51..0000000
--- a/src/generic/operators.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "operators.hpp"
-//    operators.cpp - ADL helper for value wrappers.
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/ints/cmp.cpp b/src/ints/cmp.cpp
deleted file mode 100644
index 94ff0e3..0000000
--- a/src/ints/cmp.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "cmp.hpp"
-//    cmp.cpp - comparison related operations
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/ints/little.cpp b/src/ints/little.cpp
deleted file mode 100644
index 0ae5bf7..0000000
--- a/src/ints/little.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "little.hpp"
-//    little.cpp - integers of known endianness
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/ints/udl.cpp b/src/ints/udl.cpp
deleted file mode 100644
index 3988903..0000000
--- a/src/ints/udl.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "udl.hpp"
-//    udl.cpp - user-defined literals for integers.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/ints/wrap.cpp b/src/ints/wrap.cpp
deleted file mode 100644
index 84d4b33..0000000
--- a/src/ints/wrap.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "wrap.hpp"
-//    wrap.cpp - basic integer wrapper classes
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/io/cxxstdio.cpp b/src/io/cxxstdio.cpp
deleted file mode 100644
index ca4e880..0000000
--- a/src/io/cxxstdio.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "cxxstdio.hpp"
-//    cxxstdio.cpp - pass C++ types through printf
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/io/cxxstdio_enums.cpp b/src/io/cxxstdio_enums.cpp
deleted file mode 100644
index 216da1d..0000000
--- a/src/io/cxxstdio_enums.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "cxxstdio_enums.hpp"
-//    cxxstdio_enums.cpp - Opt-in integer formatting support for enums.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/io/tty.cpp b/src/io/tty.cpp
deleted file mode 100644
index c498740..0000000
--- a/src/io/tty.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "tty.hpp"
-//    io/tty.cpp - terminal escape sequences
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-/* Nothing to see here, move along */
-} // namespace tmwa
diff --git a/src/map/magic-expr-eval.cpp b/src/map/magic-expr-eval.cpp
deleted file mode 100644
index 9903600..0000000
--- a/src/map/magic-expr-eval.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "magic-expr-eval.hpp"
-//    magic-expr-eval.cpp - Utilities for evaluating magic.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace magic
-{
-} // namespace magic
-} // namespace tmwa
diff --git a/src/map/magic-interpreter.cpp b/src/map/magic-interpreter.cpp
deleted file mode 100644
index 389a821..0000000
--- a/src/map/magic-interpreter.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "magic-interpreter.hpp"
-//    magic-interpreter.cpp - Old magic.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace magic
-{
-} // namespace magic
-} // namespace tmwa
diff --git a/src/map/script-buffer.cpp b/src/map/script-buffer.cpp
deleted file mode 100644
index f3a639a..0000000
--- a/src/map/script-buffer.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "script-buffer.hpp"
-//    script-buffer.cpp - EAthena script frontend, engine, and library.
-//
-//    Copyright © ????-2004 Athena Dev Teams
-//    Copyright © 2004-2011 The Mana World Development Team
-//    Copyright © 2011 Chuck Miller
-//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
-//    Copyright © 2013 wushin
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/map/script-persist.cpp b/src/map/script-persist.cpp
deleted file mode 100644
index 9397d42..0000000
--- a/src/map/script-persist.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "script-persist.hpp"
-//    script-persist.cpp - EAthena script frontend, engine, and library.
-//
-//    Copyright © ????-2004 Athena Dev Teams
-//    Copyright © 2004-2011 The Mana World Development Team
-//    Copyright © 2011 Chuck Miller
-//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
-//    Copyright © 2013 wushin
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/consts.cpp b/src/mmo/consts.cpp
deleted file mode 100644
index e49cdf5..0000000
--- a/src/mmo/consts.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "consts.hpp"
-//    consts.cpp - empty mess of constants
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/enums.cpp b/src/mmo/enums.cpp
deleted file mode 100644
index d05be91..0000000
--- a/src/mmo/enums.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "enums.hpp"
-//    enums.cpp - Common enumerated types
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/extract_enums.cpp b/src/mmo/extract_enums.cpp
deleted file mode 100644
index f906179..0000000
--- a/src/mmo/extract_enums.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "extract_enums.hpp"
-//    extract_enums.cpp - Opt-in integer extraction support for enums.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/human_time_diff.cpp b/src/mmo/human_time_diff.cpp
deleted file mode 100644
index 49a7664..0000000
--- a/src/mmo/human_time_diff.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "human_time_diff.hpp"
-//    human_time_diff.cpp - broken deltas
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/ids.cpp b/src/mmo/ids.cpp
deleted file mode 100644
index d40d5c3..0000000
--- a/src/mmo/ids.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "ids.hpp"
-//    ids.cpp - special integer classes for various object IDs
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/mmo.cpp b/src/mmo/mmo.cpp
deleted file mode 100644
index aafa431..0000000
--- a/src/mmo/mmo.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "mmo.hpp"
-//    mmo.cpp - dummy file to make Make dependencies work
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/mmo/strs.cpp b/src/mmo/strs.cpp
deleted file mode 100644
index 71dceec..0000000
--- a/src/mmo/strs.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "strs.hpp"
-//    strs.cpp - common string types
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/range/slice.cpp b/src/range/slice.cpp
deleted file mode 100644
index f93c19f..0000000
--- a/src/range/slice.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "slice.hpp"
-//    slice.cpp - dummy file to make Make dependencies work
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/src/sexpr/bind.cpp b/src/sexpr/bind.cpp
deleted file mode 100644
index d8d0caa..0000000
--- a/src/sexpr/bind.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "bind.hpp"
-//    bind.cpp - Just include the header file.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace sexpr
-{
-} // namespace sexpr
-} // namespace tmwa
diff --git a/src/sexpr/union.cpp b/src/sexpr/union.cpp
deleted file mode 100644
index 6f65012..0000000
--- a/src/sexpr/union.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "union.hpp"
-//    union.cpp - Just include the header file and try to instantiate.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace sexpr
-{
-namespace
-{
-    struct Foo
-    {
-        Foo();
-        Foo(const Foo&);
-        Foo& operator = (const Foo&);
-        ~Foo();
-    };
-} // anonymous namespace
-static Union<int, Foo> u;
-
-static_assert(u.index<int>() == 0, "int");
-static_assert(u.index<Foo>() == 1, "Foo");
-static_assert(u.index<char>() == size_t(-1), "char");
-} // namespace sexpr
-} // namespace tmwa
diff --git a/src/sexpr/union_test.cpp b/src/sexpr/union_test.cpp
new file mode 100644
index 0000000..ca60b49
--- /dev/null
+++ b/src/sexpr/union_test.cpp
@@ -0,0 +1,44 @@
+#include "union.hpp"
+//    union_test.cpp - Just include the header file and try to instantiate.
+//
+//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
+//
+//    This file is part of The Mana World (Athena server)
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#include "../poison.hpp"
+
+
+namespace tmwa
+{
+namespace sexpr
+{
+namespace
+{
+    struct Foo
+    {
+        Foo();
+        Foo(const Foo&);
+        Foo& operator = (const Foo&);
+        ~Foo();
+    };
+} // anonymous namespace
+static Union<int, Foo> u;
+
+static_assert(u.index<int>() == 0, "int");
+static_assert(u.index<Foo>() == 1, "Foo");
+static_assert(u.index<char>() == size_t(-1), "char");
+} // namespace sexpr
+} // namespace tmwa
diff --git a/src/sexpr/variant.cpp b/src/sexpr/variant.cpp
deleted file mode 100644
index b1f500a..0000000
--- a/src/sexpr/variant.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "variant.hpp"
-//    variant.cpp - Just include the header file.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace sexpr
-{
-namespace
-{
-    struct Foo
-    {
-        Foo() {}
-        ~Foo() {}
-        Foo(Foo&&) {}
-        Foo& operator = (Foo&&) { return *this; }
-    };
-} // anonymous namespace
-    static Variant<int, Foo> v;
-} // namespace sexpr
-} // namespace tmwa
diff --git a/src/sexpr/void.cpp b/src/sexpr/void.cpp
deleted file mode 100644
index 9f0eeb5..0000000
--- a/src/sexpr/void.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "void.hpp"
-//    void.cpp - Just include the header file.
-//
-//    Copyright © 2012 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace sexpr
-{
-} // namespace sexpr
-} // namespace tmwa
diff --git a/src/strings/vstring.cpp b/src/strings/vstring.cpp
deleted file mode 100644
index 1cb313a..0000000
--- a/src/strings/vstring.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "vstring.hpp"
-//    strings/vstring.cpp - Functions for vstring.hpp
-//
-//    Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-namespace strings
-{
-} // namespace strings
-} // namespace tmwa
diff --git a/src/tests/fdhack.cpp b/src/tests/fdhack.cpp
deleted file mode 100644
index 7a95431..0000000
--- a/src/tests/fdhack.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "fdhack.hpp"
-//    fdhack.cpp - Move file descriptors around.
-//
-//    Copyright © 2014 Ben Longbons <b.r.longbons@gmail.com>
-//
-//    This file is part of The Mana World (Athena server)
-//
-//    This program is free software: you can redistribute it and/or modify
-//    it under the terms of the GNU General Public License as published by
-//    the Free Software Foundation, either version 3 of the License, or
-//    (at your option) any later version.
-//
-//    This program is distributed in the hope that it will be useful,
-//    but WITHOUT ANY WARRANTY; without even the implied warranty of
-//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//    GNU General Public License for more details.
-//
-//    You should have received a copy of the GNU General Public License
-//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-#include "../poison.hpp"
-
-
-namespace tmwa
-{
-} // namespace tmwa
diff --git a/tools/protocol.py b/tools/protocol.py
index a423722..19f7f4a 100755
--- a/tools/protocol.py
+++ b/tools/protocol.py
@@ -414,22 +414,6 @@ class Include(object):
         self.path = path
         self._types = []
 
-    def testcase(self, outdir):
-        basename = os.path.basename(self.path.strip('<">'))
-        root = os.path.splitext(basename)[0]
-        filename = 'include_%s_test.cpp' % root.replace('.', '_')
-        desc = 'testsuite for protocol includes'
-        poison = relpath('src/poison.hpp', outdir)
-        with OpenWrite(os.path.join(outdir, filename)) as f:
-            f.write(self.pp(0))
-            f.write(copyright.format(filename=filename, description=desc))
-            f.write('\n')
-            f.write('#include "%s"\n\nnamespace tmwa\n{\n' % poison)
-
-            for t in self._types:
-                f.write('using %s = %s;\n' % ('Test_' + ident(t.name), t.name))
-            f.write('} // namespace tmwa\n')
-
     def pp(self, n):
         return '#%*sinclude %s\n' % (n, '', self.path)
 
@@ -550,7 +534,6 @@ class Channel(object):
         server = self.server
         client = self.client
         header = '%s-%s.hpp' % (server, client)
-        test = '%s-%s_test.cpp' % (server, client)
         desc = 'TMWA network protocol: %s/%s' % (server, client)
         with OpenWrite(os.path.join(outdir, header)) as f:
             proto2 = relpath(outdir, 'src')
@@ -581,16 +564,6 @@ class Channel(object):
                 p.dump_convert(f)
             f.write('} // namespace tmwa\n')
 
-        with OpenWrite(os.path.join(outdir, test)) as f:
-            poison = relpath('src/poison.hpp', outdir)
-            f.write('#include "%s"\n' % header)
-            f.write(copyright.format(filename=test, description=desc))
-            f.write('\n')
-            f.write(generated)
-            f.write('\n')
-            f.write('#include "%s"\n\nnamespace tmwa\n{\n' % poison)
-            f.write('} // namespace tmwa\n')
-
 
 ident_translation = ''.join(chr(c) if chr(c).isalnum() else '_' for c in range(256))
 
@@ -670,8 +643,6 @@ class Context(object):
             f.write('\n//TODO split the includes\n')
             for inc in self._includes:
                 f.write(inc.pp(0))
-                # this is writing another file
-                inc.testcase(outdir)
             f.write('\n')
             f.write('namespace tmwa\n{\n')
 
-- 
cgit v1.2.3-70-g09d2