mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //  (C) Copyright Mathias Gaunard 2009. 
 | |
| //  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)
 | |
| 
 | |
| //  See http://www.boost.org/libs/config for the most recent version.
 | |
| 
 | |
| //  MACRO:         BOOST_NO_SFINAE_EXPR
 | |
| //  TITLE:         SFINAE for expressions
 | |
| //  DESCRIPTION:   SFINAE for expressions not supported.
 | |
| 
 | |
| namespace boost_no_sfinae_expr
 | |
| {
 | |
| 
 | |
| template<typename T>
 | |
| struct has_foo
 | |
| {
 | |
|     typedef char NotFound;
 | |
|     struct Found { char x[2]; };
 | |
|                                                                         
 | |
|     template<int> struct dummy {};
 | |
|     
 | |
|     template<class X> static Found test(dummy< sizeof((*(X*)0).foo(), 0) >*);
 | |
|     template<class X> static NotFound test( ... );
 | |
|        
 | |
|     static const bool value  = (sizeof(Found) == sizeof(test<T>(0)));
 | |
| };
 | |
| 
 | |
| struct test1 {};
 | |
| struct test2 { void foo(); };
 | |
| 
 | |
| int test()
 | |
| {
 | |
|    return has_foo<test1>::value || !has_foo<test2>::value;
 | |
| }
 | |
| 
 | |
| } // namespace boost_no_sfinae_expr
 |