Branch data Line data Source code
1 : : /* -*- mode: C++; indent-tabs-mode: nil; -*-
2 : : *
3 : : * This file is a part of LEMON, a generic C++ optimization library.
4 : : *
5 : : * Copyright (C) 2003-2009
6 : : * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 : : * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 : : *
9 : : * Permission to use, modify and distribute this software is granted
10 : : * provided that this copyright notice appears in all copies. For
11 : : * precise terms see the accompanying LICENSE file.
12 : : *
13 : : * This software is provided "AS IS" with no warranty of any kind,
14 : : * express or implied, and with no claim as to its suitability for any
15 : : * purpose.
16 : : *
17 : : */
18 : :
19 : : // The contents of this file was inspired by the concept checking
20 : : // utility of the BOOST library (http://www.boost.org).
21 : :
22 : : ///\file
23 : : ///\brief Basic utilities for concept checking.
24 : : ///
25 : :
26 : : #ifndef LEMON_CONCEPT_CHECK_H
27 : : #define LEMON_CONCEPT_CHECK_H
28 : :
29 : : namespace lemon {
30 : :
31 : : /*
32 : : "inline" is used for ignore_unused_variable_warning()
33 : : and function_requires() to make sure there is no
34 : : overtarget with g++.
35 : : */
36 : :
37 : 102 : template <class T> inline void ignore_unused_variable_warning(const T&) { }
38 : :
39 : : ///\e
40 : : template <class Concept>
41 : : inline void function_requires()
42 : : {
43 : : #if !defined(NDEBUG)
44 : : void (Concept::*x)() = & Concept::constraints;
45 : : ignore_unused_variable_warning(x);
46 : : #endif
47 : : }
48 : :
49 : : ///\e
50 : : template <typename Concept, typename Type>
51 : 102 : inline void checkConcept() {
52 : : #if !defined(NDEBUG)
53 : : typedef typename Concept::template Constraints<Type> ConceptCheck;
54 : 102 : void (ConceptCheck::*x)() = & ConceptCheck::constraints;
55 [ # # ][ # # ]: 102 : ignore_unused_variable_warning(x);
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ + - ][ + - ]
56 : : #endif
57 : 102 : }
58 : :
59 : : } // namespace lemon
60 : :
61 : : #endif // LEMON_CONCEPT_CHECK_H
|