# copyright John Maddock 2004
# Use, modification and distribution are subject to the 
# Boost Software License, Version 1.0. (See accompanying file 
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

# bring in the rules for testing
import testing ;

# type_traits in V1 seem to have two modes: standalone, triggered
# by a command line option, and a regular. For now, just imitate
# regular  

project : requirements
   # default to all warnings on:
   <warnings>all
   # set warnings as errors for those compilers we know we get warning free:
   <toolset>gcc:<cxxflags>-Wextra
   <toolset>gcc:<warnings-as-errors>on
   <toolset>intel:<warnings-as-errors>on
   <toolset>sun:<warnings-as-errors>on
   <toolset>msvc:<warnings-as-errors>on
;             

rule all-tests {
     local result ;
     for local source in [ glob *_test.cpp ] udt_specialisations.cpp
     {
         result += [ run $(source) ] ;
     }
     return $(result) ;     
}
            
test-suite type_traits : [ all-tests ] ;

compile-fail common_type_fail.cpp ;



