Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
src
mpl
Sacado_mpl_is_convertible.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Sacado Package
5
// Copyright (2006) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// This library is free software; you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as
12
// published by the Free Software Foundation; either version 2.1 of the
13
// License, or (at your option) any later version.
14
//
15
// This library is distributed in the hope that it will be useful, but
16
// WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
// Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public
21
// License along with this library; if not, write to the Free Software
22
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23
// USA
24
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25
// (etphipp@sandia.gov).
26
//
27
// ***********************************************************************
28
// @HEADER
29
30
#ifndef SACADO_MPL_IS_CONVERTIBLE_HPP
31
#define SACADO_MPL_IS_CONVERTIBLE_HPP
32
33
namespace
Sacado {
34
35
namespace
mpl {
36
37
//
38
// A simplified implementation of boost type-trait
39
// is_convertible<From,To>. We use this in a much more limited context
40
// within Sacado, and so the easy implementation should always work.
41
// We assume From and To are "scalar" types, e.g., are not pointer or
42
// reference types.
43
//
44
45
struct
convertible_impl
{
46
typedef
char
yes
;
// sizeof(yes) == 1
47
typedef
char (&
no
)[2];
// sizeof(no) == 2
48
49
// A function that takes anything convertible to a To
50
template
<
typename
To>
static
yes
tester
(To);
51
52
// Overload resolution prefers anything over ...
53
template
<
typename
To>
static
no
tester
(...);
54
55
// Check if From is convertible to To
56
template
<
typename
From,
typename
To>
57
struct
checker
{
58
static
From&
f
;
59
static
const
bool
value
=
sizeof
(tester<To>(
f
)) ==
sizeof
(
yes
);
60
};
61
};
62
63
template
<
typename
From,
typename
To>
64
struct
is_convertible
{
65
static
const
bool
value
=
convertible_impl::checker<From,To>::value
;
66
};
67
68
}
69
70
}
71
72
#endif // SACADO_MPL_IS_CONVERTIBLE_HPP
Sacado::mpl::convertible_impl::tester
static yes tester(To)
Sacado::mpl::convertible_impl::checker::value
static const bool value
Definition:
Sacado_mpl_is_convertible.hpp:59
Sacado::mpl::is_convertible
Definition:
Sacado_mpl_is_convertible.hpp:64
Sacado::mpl::convertible_impl
Definition:
Sacado_mpl_is_convertible.hpp:45
Sacado::mpl::convertible_impl::checker::f
static From & f
Definition:
Sacado_mpl_is_convertible.hpp:58
Sacado::mpl::is_convertible::value
static const bool value
Definition:
Sacado_mpl_is_convertible.hpp:65
Sacado::mpl::convertible_impl::no
char(& no)[2]
Definition:
Sacado_mpl_is_convertible.hpp:47
Sacado::mpl::convertible_impl::checker
Definition:
Sacado_mpl_is_convertible.hpp:57
Sacado::mpl::convertible_impl::yes
char yes
Definition:
Sacado_mpl_is_convertible.hpp:46
Generated by
1.8.5