[EDIT]
Cette discutions viens d'un déplacement de ce thread
http://www.developpez.net/forums/sho...d.php?t=506343






Citation Envoyé par Emmanuel Deloget Voir le message
std 3.2/3 dit explicitement que les fonctions inline sont définies dans chaque UT qui les utilise.
Bon, je vois ce qui se passe (enfin je crois) : tu interprètes cette phrase comme disant le contraire de ce qu'elle dit : les fonctions inline ne sont pas statiques (à moins d'être déclarées static, bien sûr), elles ont une liaison externe, ce qui veut dire que chaque UT qui définit une fonction inline définit la même fonction.

On doit d'ailleurs pouvoir le vérifier (non testé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
header.hpp :

#include <iostream>
#include <ostream>

inline int& extern_inline () {
	static int si;
	return si;
}

static inline int& static_inline () {
	static int si;
	return si;
}

static void print () {
	std::cout << "static_inline : " << static_inline() << "\n";
	std::cout << "extern_inline : " << extern_inline() << "\n";
}

static void inc () {
	static_inline()++;
	extern_inline()++;
}

void a ();

a.cpp : 

#include "header.hpp"

void a () {
	std::cout << "a :\n";
	print ();
	inc ();
	inc ();
	print ();
}

main.cpp :

#include "header.hpp"

int main () {
	std::cout << "main :\n";
	print ();
	inc();
	print ();

	a ();

	std::cout << "main :\n";
	print ();
}
La sortie devrait être (il me semble) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
main :
static_inline 0
extern_inline 0
static_inline 1
extern_inline 1
a :
static_inline 0
extern_inline 1
static_inline 2
extern_inline 3
main :
static_inline 1
extern_inline 3
EDIT : Avec #include c'est mieux.