converts_to.cc 2.08 KB
Newer Older
1
2
// Copyright (C) 2007, 2008, 2009, 2013 EPITA Research and Development
// Laboratory (LRDE)
Thierry Geraud's avatar
Thierry Geraud committed
3
//
4
// This file is part of Olena.
Thierry Geraud's avatar
Thierry Geraud committed
5
//
6
7
8
9
10
// Olena is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation, version 2 of the License.
//
// Olena is distributed in the hope that it will be useful,
Thierry Geraud's avatar
Thierry Geraud committed
11
12
13
14
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
16
// along with Olena.  If not, see <http://www.gnu.org/licenses/>.
Thierry Geraud's avatar
Thierry Geraud committed
17
18
//
// As a special exception, you may use this file as part of a free
19
// software project without restriction.  Specifically, if other files
Thierry Geraud's avatar
Thierry Geraud committed
20
// instantiate templates or use macros or inline functions from this
21
22
23
24
25
// file, or you compile this file and link it with other files to produce
// an executable, this file does not by itself cause the resulting
// executable to be covered by the GNU General Public License.  This
// exception does not however invalidate any other reasons why the
// executable file might be covered by the GNU General Public License.
Thierry Geraud's avatar
Thierry Geraud committed
26

Thierry Geraud's avatar
Thierry Geraud committed
27
#include <mln/metal/converts_to.hh>
Thierry Geraud's avatar
Thierry Geraud committed
28

29
#include <mln/accu/math/sum.hh>
Thierry Geraud's avatar
Thierry Geraud committed
30
31


Thierry Geraud's avatar
Thierry Geraud committed
32
33
34
35
36
37
38
39
40
41
42
struct from_1
{
};

struct dest
{
  dest(const from_1&) {}
};

struct from_2
{
43
  operator dest() const { dest* tmp = 0; return *tmp; }
Thierry Geraud's avatar
Thierry Geraud committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
};


struct base
{
};

struct base_
{
protected:
  base_(int) {}
  base_(const base_&) {}
};

struct derived : base, base_
{
  derived() : base(), base_(0) {}
};


Thierry Geraud's avatar
Thierry Geraud committed
64
65
66
67
int main()
{
  using namespace mln;

Thierry Geraud's avatar
Thierry Geraud committed
68
69
70
71
72
73
74
75
  metal::converts_to<int, float>::check();

  metal::converts_to<from_1, dest>::check();
  metal::converts_to<from_2, dest>::check();

  metal::converts_to<derived*, base*>::check();
  metal::converts_to<derived, base>::check();
  metal::converts_to<derived, const base>::check();
Thierry Geraud's avatar
Thierry Geraud committed
76

77
78
  metal::converts_to<accu::math::sum<int, int>, int>::check();

Thierry Geraud's avatar
Thierry Geraud committed
79
80
//   metal::converts_to<derived, base_>::check_not();
//   metal::converts_to<derived, const base_>::check_not();
Thierry Geraud's avatar
Thierry Geraud committed
81
}