Modern compiler will issue a following error whenever '#include <string>'
is done:
/nix/store/yxpwamjdapjcp53mmsdh1j2c9bc26h4k-libc++-3.7.1/include/c++/v1/string:1938:44:
error: 'basic_string<_CharT, _Traits, _Allocator>' is missing exception specification 'noexcept(is_nothrow_copy_constructible<allocator_type>::value)'
basic_string<_CharT, _Traits, _Allocator>::basic_string(const allocator_type& __a)
                                           ^
/nix/store/yxpwamjdapjcp53mmsdh1j2c9bc26h4k-libc++-3.7.1/include/c++/v1/string:1326:40:
note: previous declaration is here
    _LIBCPP_INLINE_VISIBILITY explicit basic_string(const allocator_type& __a)
                                       ^
1 error generated.
This happens because modern clang is more strict about checking
exception specification for forward declaration and definition.
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?r1=242056&r2=242623&diff_format=h
		
	
			
		
			
				
	
	
		
			17 lines
		
	
	
		
			528 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			17 lines
		
	
	
		
			528 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/include/string	2015/07/13 20:04:56	242056
 | 
						|
+++ b/include/string	2015/07/18 20:40:46	242623
 | 
						|
@@ -1936,7 +1936,12 @@
 | 
						|
 template <class _CharT, class _Traits, class _Allocator>
 | 
						|
 inline _LIBCPP_INLINE_VISIBILITY
 | 
						|
 basic_string<_CharT, _Traits, _Allocator>::basic_string(const allocator_type& __a)
 | 
						|
-    : __r_(__a)
 | 
						|
+#if _LIBCPP_STD_VER <= 14
 | 
						|
+        _NOEXCEPT_(is_nothrow_copy_constructible<allocator_type>::value)
 | 
						|
+#else
 | 
						|
+        _NOEXCEPT
 | 
						|
+#endif
 | 
						|
+: __r_(__a)
 | 
						|
 {
 | 
						|
 #if _LIBCPP_DEBUG_LEVEL >= 2
 | 
						|
     __get_db()->__insert_c(this);
 |