00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00048 #ifndef STLSOFT_INCL_STLSOFT_UTIL_HPP_COMPILER_OPTIMISATION_TRAITS
00049 #define STLSOFT_INCL_STLSOFT_UTIL_HPP_COMPILER_OPTIMISATION_TRAITS
00050
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_H_STLSOFT_COMPILER_OPTIMISATION_TRAITS_MAJOR 4
00053 # define STLSOFT_VER_H_STLSOFT_COMPILER_OPTIMISATION_TRAITS_MINOR 0
00054 # define STLSOFT_VER_H_STLSOFT_COMPILER_OPTIMISATION_TRAITS_REVISION 1
00055 # define STLSOFT_VER_H_STLSOFT_COMPILER_OPTIMISATION_TRAITS_EDIT 21
00056 #endif
00057
00058
00059
00060
00061
00062 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00063 # include <stlsoft/stlsoft.h>
00064 #endif
00065
00066
00067
00068
00069
00070 #ifndef _STLSOFT_NO_NAMESPACE
00071 namespace stlsoft
00072 {
00073 #endif
00074
00075
00076
00077
00078
00079 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00080
00085 struct compiler_optimisation_traits_ebo_parent
00086 {};
00087
00088
00089
00090
00101 struct compiler_optimisation_traits_ebo_thin_child
00102 : compiler_optimisation_traits_ebo_parent
00103 {};
00104
00115 struct compiler_optimisation_traits_ebo_thick_child
00116 : compiler_optimisation_traits_ebo_parent
00117 {
00118 int i;
00119 };
00120
00126 struct compiler_optimisation_traits_ebo_thick_peer
00127 {
00128 int i;
00129 };
00130
00144 struct compiler_optimisation_traits_ebo_thin_grandchild
00145 : compiler_optimisation_traits_ebo_thin_child
00146 {};
00147
00161 struct compiler_optimisation_traits_ebo_thick_grandchild
00162 : compiler_optimisation_traits_ebo_thin_child
00163 {
00164 int i;
00165 };
00166
00172 struct compiler_optimisation_traits_ebo_parent2
00173 {};
00174
00185 struct compiler_optimisation_traits_ebo_mi_thin_child
00186 : compiler_optimisation_traits_ebo_parent, compiler_optimisation_traits_ebo_parent2
00187 {};
00188
00199 struct compiler_optimisation_traits_ebo_mi_thick_child
00200 : compiler_optimisation_traits_ebo_parent, compiler_optimisation_traits_ebo_parent2
00201 {
00202 int i;
00203 };
00204
00215 struct compiler_optimisation_traits_ebo_mi_mixin_child
00216 : compiler_optimisation_traits_ebo_parent, compiler_optimisation_traits_ebo_thick_peer
00217 {};
00218
00219
00220
00221
00222
00228 struct compiler_optimisation_traits_edo_thin_base
00229 {};
00230
00236 struct compiler_optimisation_traits_edo_thick_base
00237 {
00238 int i;
00239 };
00240
00246 struct compiler_optimisation_traits_edo_thin_base2
00247 {};
00248
00254 template <ss_typename_param_k T>
00255 struct compiler_optimisation_traits_edo_child
00256 : T
00257 {};
00258
00269 struct compiler_optimisation_traits_edo_child_of_thick_base
00270 : compiler_optimisation_traits_edo_thick_base
00271 {};
00272
00273
00279 template< ss_typename_param_k T1
00280 , ss_typename_param_k T2
00281 >
00282 struct compiler_optimisation_traits_edo_mi_child
00283 : T1, T2
00284 {};
00285
00286 #endif
00287
00293 struct compiler_optimisation_traits
00294 {
00295 public:
00296
00297
00299 enum { supportsEBO1 = sizeof(compiler_optimisation_traits_ebo_thin_child) == sizeof(compiler_optimisation_traits_ebo_parent) };
00301 enum { supportsEBO2 = sizeof(compiler_optimisation_traits_ebo_thick_child) == sizeof(compiler_optimisation_traits_ebo_thick_peer) };
00303 enum { supportsEBO3 = sizeof(compiler_optimisation_traits_ebo_thin_grandchild) == sizeof(compiler_optimisation_traits_ebo_parent) };
00305 enum { supportsEBO4 = sizeof(compiler_optimisation_traits_ebo_thick_grandchild) == sizeof(compiler_optimisation_traits_ebo_thick_peer) };
00307 enum { supportsEBO5 = sizeof(compiler_optimisation_traits_ebo_mi_thin_child) == sizeof(compiler_optimisation_traits_ebo_parent) };
00309 enum { supportsEBO6 = sizeof(compiler_optimisation_traits_ebo_mi_thick_child) == sizeof(compiler_optimisation_traits_ebo_thick_peer) };
00311 enum { supportsEBO7 = sizeof(compiler_optimisation_traits_ebo_mi_mixin_child) == sizeof(compiler_optimisation_traits_ebo_thick_peer) };
00312
00313 enum { supportsEBO = supportsEBO1 & supportsEBO2 & supportsEBO3 & supportsEBO4 };
00314 enum { supportsMIEBO = supportsEBO5 & supportsEBO6 & supportsEBO7 };
00315 enum { supportsExtendedEBO = supportsEBO & supportsMIEBO };
00316
00317
00318
00320 enum { supportsEDO1 = supportsEBO1 };
00322 enum { supportsEDO2 = sizeof(compiler_optimisation_traits_edo_child<compiler_optimisation_traits_edo_thin_base>) == sizeof(compiler_optimisation_traits_edo_thin_base) };
00324 enum { supportsEDO3 = sizeof(compiler_optimisation_traits_edo_child_of_thick_base) == sizeof(compiler_optimisation_traits_edo_thick_base) };
00326 enum { supportsEDO4 = sizeof(compiler_optimisation_traits_edo_child<compiler_optimisation_traits_edo_thick_base>) == sizeof(compiler_optimisation_traits_edo_thick_base) };
00327
00329 enum { supportsEDO5 = supportsEBO5 };
00331 enum { supportsEDO6 = sizeof(compiler_optimisation_traits_edo_mi_child<compiler_optimisation_traits_edo_thin_base, compiler_optimisation_traits_edo_thin_base2>) == sizeof(compiler_optimisation_traits_edo_thin_base) };
00333 enum { supportsEDO7 = supportsEBO7 };
00335 enum { supportsEDO8 = sizeof(compiler_optimisation_traits_edo_mi_child<compiler_optimisation_traits_edo_thick_base, compiler_optimisation_traits_edo_thin_base>) == sizeof(compiler_optimisation_traits_edo_thick_base) };
00336
00337 enum { supportsEDO = supportsEDO1 & supportsEDO2 & supportsEDO3 & supportsEDO4 };
00338 enum { supportsMIEDO = supportsEDO5 & supportsEDO6 & supportsEDO7 & supportsEDO8 };
00339 enum { supportsExtendedEDO = supportsEDO & supportsMIEDO };
00340 };
00341
00342
00343
00344 #ifndef _STLSOFT_NO_NAMESPACE
00345 }
00346 #endif
00347
00348
00349
00350 #endif
00351
00352