diff --git a/src/exception.cpp b/src/exception.cpp
index 7c52115..5b3c39c 100644
--- a/src/exception.cpp
+++ b/src/exception.cpp
@@ -18,14 +18,12 @@
   // current unexpected handler are in the ABI library.
   #define __terminate_handler  __cxxabiapple::__cxa_terminate_handler
   #define __unexpected_handler __cxxabiapple::__cxa_unexpected_handler
-#else
+#else  // __APPLE__
   static std::terminate_handler  __terminate_handler;
   static std::unexpected_handler __unexpected_handler;
-#endif
+#endif  // __APPLE__
 
-
-
-std::unexpected_handler 
+std::unexpected_handler
 std::set_unexpected(std::unexpected_handler func) throw()
 {
     std::terminate_handler old = __unexpected_handler;
@@ -41,8 +39,7 @@
     std::terminate();
 }
 
-
-std::terminate_handler 
+std::terminate_handler
 std::set_terminate(std::terminate_handler func) throw()
 {
     std::terminate_handler old = __terminate_handler;
@@ -50,53 +47,49 @@
     return old;
 }
 
-
 void
 std::terminate()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     try
     {
-#endif
+#endif  // _LIBCPP_NO_EXCEPTIONS
         (*__terminate_handler)();
         // handler should not return
         ::abort ();
 #ifndef _LIBCPP_NO_EXCEPTIONS
-    } 
+    }
     catch (...)
     {
         // handler should not throw exception
         ::abort ();
     }
-#endif
+#endif  // _LIBCPP_NO_EXCEPTIONS
 }
 
-
 bool std::uncaught_exception() throw()
 {
 #if __APPLE__
 	// on Darwin, there is a helper function so __cxa_get_globals is private
     return __cxxabiapple::__cxa_uncaught_exception();
-#else
+#else  // __APPLE__
     #warning uncaught_exception not yet implemented
     ::abort();
     // Not provided by Ubuntu gcc-4.2.4's cxxabi.h.
     // __cxa_eh_globals * globals = __cxa_get_globals();
     // return (globals->uncaughtExceptions != 0);
-#endif
+#endif  // __APPLE__
 }
 
-
-namespace std 
+namespace std
 {
 
-
-exception::~exception() throw() 
-{ 
+exception::~exception() throw()
+{
 }
 
-bad_exception::~bad_exception() throw() 
-{ 
+bad_exception::~bad_exception() throw()
+{
 }
 
 const char* exception::what() const throw()
@@ -109,8 +102,6 @@
   return "std::bad_exception";
 }
 
-
-
 exception_ptr::~exception_ptr()
 {
 #if __APPLE__
@@ -118,7 +109,7 @@
 #else
 	#warning exception_ptr not yet implemented
 	::abort();
-#endif
+#endif  // __APPLE__
 }
 
 exception_ptr::exception_ptr(const exception_ptr& other)
@@ -129,7 +120,7 @@
 #else
 	#warning exception_ptr not yet implemented
 	::abort();
-#endif
+#endif  // __APPLE__
 }
 
 exception_ptr& exception_ptr::operator=(const exception_ptr& other)
@@ -142,10 +133,10 @@
 		__ptr_ = other.__ptr_;
 	}
     return *this;
-#else
+#else  // __APPLE__
 	#warning exception_ptr not yet implemented
 	::abort();
-#endif
+#endif  // __APPLE__
 }
 
 nested_exception::nested_exception()
@@ -167,30 +158,29 @@
 
 } // std
 
-
 std::exception_ptr std::current_exception()
 {
 #if __APPLE__
-	// be nicer if there was a constructor that took a ptr, then 
+	// be nicer if there was a constructor that took a ptr, then
 	// this whole function would be just:
 	//    return exception_ptr(__cxa_current_primary_exception());
     std::exception_ptr ptr;
 	ptr.__ptr_ = __cxxabiapple::__cxa_current_primary_exception();
 	return ptr;
-#else
+#else  // __APPLE__
 	#warning exception_ptr not yet implemented
 	::abort();
-#endif
+#endif  // __APPLE__
 }
 
 void std::rethrow_exception(exception_ptr p)
 {
 #if __APPLE__
-	__cxxabiapple::__cxa_rethrow_primary_exception(p.__ptr_); 
+	__cxxabiapple::__cxa_rethrow_primary_exception(p.__ptr_);
 	// if p.__ptr_ is NULL, above returns so we terminate
-    terminate(); 
-#else
+    terminate();
+#else  // __APPLE__
 	#warning exception_ptr not yet implemented
 	::abort();
-#endif
+#endif  // __APPLE__
 }
