COIN-OR::LEMON - Graph Library

source: lemon/lemon/concept_check.h

Last change on this file was 1270:dceba191c00d, checked in by Alpar Juttner <alpar@…>, 11 years ago

Apply unify-sources.sh to the source tree

File size: 2.6 KB
Line 
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-2013
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
29namespace 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  template <class T> inline void ignore_unused_variable_warning(const T&) { }
38  template <class T1, class T2>
39  inline void ignore_unused_variable_warning(const T1&, const T2&) { }
40  template <class T1, class T2, class T3>
41  inline void ignore_unused_variable_warning(const T1&, const T2&,
42                                             const T3&) { }
43  template <class T1, class T2, class T3, class T4>
44  inline void ignore_unused_variable_warning(const T1&, const T2&,
45                                             const T3&, const T4&) { }
46  template <class T1, class T2, class T3, class T4, class T5>
47  inline void ignore_unused_variable_warning(const T1&, const T2&,
48                                             const T3&, const T4&,
49                                             const T5&) { }
50  template <class T1, class T2, class T3, class T4, class T5, class T6>
51  inline void ignore_unused_variable_warning(const T1&, const T2&,
52                                             const T3&, const T4&,
53                                             const T5&, const T6&) { }
54
55  ///\e
56  template <class Concept>
57  inline void function_requires()
58  {
59#if !defined(NDEBUG)
60    void (Concept::*x)() = & Concept::constraints;
61    ::lemon::ignore_unused_variable_warning(x);
62#endif
63  }
64
65  ///\e
66  template <typename Concept, typename Type>
67  inline void checkConcept() {
68#if !defined(NDEBUG)
69    typedef typename Concept::template Constraints<Type> ConceptCheck;
70    void (ConceptCheck::*x)() = & ConceptCheck::constraints;
71    ::lemon::ignore_unused_variable_warning(x);
72#endif
73  }
74
75} // namespace lemon
76
77#endif // LEMON_CONCEPT_CHECK_H
Note: See TracBrowser for help on using the repository browser.