code:
# /* **************************************************************************
#  *                                                                          *
#  *     (C) Copyright Paul Mensonides 2002.
#  *     Distributed under the Boost Software License, Version 1.0. (See
#  *     accompanying file LICENSE_1_0.txt or copy at
#  *     http://www.boost.org/LICENSE_1_0.txt)
#  *                                                                          *
#  ************************************************************************** */
#
# /* See http://www.boost.org for most recent version. */
#
# if BOOST_PP_ITERATION_FINISH_4 <= 256 && BOOST_PP_ITERATION_START_4 >= 256
#    define BOOST_PP_ITERATION_4 256
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 255 && BOOST_PP_ITERATION_START_4 >= 255
#    define BOOST_PP_ITERATION_4 255
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 254 && BOOST_PP_ITERATION_START_4 >= 254
#    define BOOST_PP_ITERATION_4 254
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 253 && BOOST_PP_ITERATION_START_4 >= 253
#    define BOOST_PP_ITERATION_4 253
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 252 && BOOST_PP_ITERATION_START_4 >= 252
#    define BOOST_PP_ITERATION_4 252
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 251 && BOOST_PP_ITERATION_START_4 >= 251
#    define BOOST_PP_ITERATION_4 251
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 250 && BOOST_PP_ITERATION_START_4 >= 250
#    define BOOST_PP_ITERATION_4 250
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 249 && BOOST_PP_ITERATION_START_4 >= 249
#    define BOOST_PP_ITERATION_4 249
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 248 && BOOST_PP_ITERATION_START_4 >= 248
#    define BOOST_PP_ITERATION_4 248
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 247 && BOOST_PP_ITERATION_START_4 >= 247
#    define BOOST_PP_ITERATION_4 247
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 246 && BOOST_PP_ITERATION_START_4 >= 246
#    define BOOST_PP_ITERATION_4 246
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 245 && BOOST_PP_ITERATION_START_4 >= 245
#    define BOOST_PP_ITERATION_4 245
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 244 && BOOST_PP_ITERATION_START_4 >= 244
#    define BOOST_PP_ITERATION_4 244
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 243 && BOOST_PP_ITERATION_START_4 >= 243
#    define BOOST_PP_ITERATION_4 243
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 242 && BOOST_PP_ITERATION_START_4 >= 242
#    define BOOST_PP_ITERATION_4 242
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 241 && BOOST_PP_ITERATION_START_4 >= 241
#    define BOOST_PP_ITERATION_4 241
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 240 && BOOST_PP_ITERATION_START_4 >= 240
#    define BOOST_PP_ITERATION_4 240
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 239 && BOOST_PP_ITERATION_START_4 >= 239
#    define BOOST_PP_ITERATION_4 239
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 238 && BOOST_PP_ITERATION_START_4 >= 238
#    define BOOST_PP_ITERATION_4 238
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 237 && BOOST_PP_ITERATION_START_4 >= 237
#    define BOOST_PP_ITERATION_4 237
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 236 && BOOST_PP_ITERATION_START_4 >= 236
#    define BOOST_PP_ITERATION_4 236
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 235 && BOOST_PP_ITERATION_START_4 >= 235
#    define BOOST_PP_ITERATION_4 235
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 234 && BOOST_PP_ITERATION_START_4 >= 234
#    define BOOST_PP_ITERATION_4 234
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 233 && BOOST_PP_ITERATION_START_4 >= 233
#    define BOOST_PP_ITERATION_4 233
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 232 && BOOST_PP_ITERATION_START_4 >= 232
#    define BOOST_PP_ITERATION_4 232
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 231 && BOOST_PP_ITERATION_START_4 >= 231
#    define BOOST_PP_ITERATION_4 231
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 230 && BOOST_PP_ITERATION_START_4 >= 230
#    define BOOST_PP_ITERATION_4 230
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 229 && BOOST_PP_ITERATION_START_4 >= 229
#    define BOOST_PP_ITERATION_4 229
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 228 && BOOST_PP_ITERATION_START_4 >= 228
#    define BOOST_PP_ITERATION_4 228
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 227 && BOOST_PP_ITERATION_START_4 >= 227
#    define BOOST_PP_ITERATION_4 227
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 226 && BOOST_PP_ITERATION_START_4 >= 226
#    define BOOST_PP_ITERATION_4 226
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 225 && BOOST_PP_ITERATION_START_4 >= 225
#    define BOOST_PP_ITERATION_4 225
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 224 && BOOST_PP_ITERATION_START_4 >= 224
#    define BOOST_PP_ITERATION_4 224
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 223 && BOOST_PP_ITERATION_START_4 >= 223
#    define BOOST_PP_ITERATION_4 223
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 222 && BOOST_PP_ITERATION_START_4 >= 222
#    define BOOST_PP_ITERATION_4 222
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 221 && BOOST_PP_ITERATION_START_4 >= 221
#    define BOOST_PP_ITERATION_4 221
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 220 && BOOST_PP_ITERATION_START_4 >= 220
#    define BOOST_PP_ITERATION_4 220
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 219 && BOOST_PP_ITERATION_START_4 >= 219
#    define BOOST_PP_ITERATION_4 219
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 218 && BOOST_PP_ITERATION_START_4 >= 218
#    define BOOST_PP_ITERATION_4 218
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 217 && BOOST_PP_ITERATION_START_4 >= 217
#    define BOOST_PP_ITERATION_4 217
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 216 && BOOST_PP_ITERATION_START_4 >= 216
#    define BOOST_PP_ITERATION_4 216
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 215 && BOOST_PP_ITERATION_START_4 >= 215
#    define BOOST_PP_ITERATION_4 215
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 214 && BOOST_PP_ITERATION_START_4 >= 214
#    define BOOST_PP_ITERATION_4 214
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 213 && BOOST_PP_ITERATION_START_4 >= 213
#    define BOOST_PP_ITERATION_4 213
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 212 && BOOST_PP_ITERATION_START_4 >= 212
#    define BOOST_PP_ITERATION_4 212
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 211 && BOOST_PP_ITERATION_START_4 >= 211
#    define BOOST_PP_ITERATION_4 211
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 210 && BOOST_PP_ITERATION_START_4 >= 210
#    define BOOST_PP_ITERATION_4 210
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 209 && BOOST_PP_ITERATION_START_4 >= 209
#    define BOOST_PP_ITERATION_4 209
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 208 && BOOST_PP_ITERATION_START_4 >= 208
#    define BOOST_PP_ITERATION_4 208
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 207 && BOOST_PP_ITERATION_START_4 >= 207
#    define BOOST_PP_ITERATION_4 207
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 206 && BOOST_PP_ITERATION_START_4 >= 206
#    define BOOST_PP_ITERATION_4 206
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 205 && BOOST_PP_ITERATION_START_4 >= 205
#    define BOOST_PP_ITERATION_4 205
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 204 && BOOST_PP_ITERATION_START_4 >= 204
#    define BOOST_PP_ITERATION_4 204
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 203 && BOOST_PP_ITERATION_START_4 >= 203
#    define BOOST_PP_ITERATION_4 203
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 202 && BOOST_PP_ITERATION_START_4 >= 202
#    define BOOST_PP_ITERATION_4 202
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 201 && BOOST_PP_ITERATION_START_4 >= 201
#    define BOOST_PP_ITERATION_4 201
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 200 && BOOST_PP_ITERATION_START_4 >= 200
#    define BOOST_PP_ITERATION_4 200
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 199 && BOOST_PP_ITERATION_START_4 >= 199
#    define BOOST_PP_ITERATION_4 199
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 198 && BOOST_PP_ITERATION_START_4 >= 198
#    define BOOST_PP_ITERATION_4 198
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 197 && BOOST_PP_ITERATION_START_4 >= 197
#    define BOOST_PP_ITERATION_4 197
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 196 && BOOST_PP_ITERATION_START_4 >= 196
#    define BOOST_PP_ITERATION_4 196
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 195 && BOOST_PP_ITERATION_START_4 >= 195
#    define BOOST_PP_ITERATION_4 195
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 194 && BOOST_PP_ITERATION_START_4 >= 194
#    define BOOST_PP_ITERATION_4 194
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 193 && BOOST_PP_ITERATION_START_4 >= 193
#    define BOOST_PP_ITERATION_4 193
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 192 && BOOST_PP_ITERATION_START_4 >= 192
#    define BOOST_PP_ITERATION_4 192
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 191 && BOOST_PP_ITERATION_START_4 >= 191
#    define BOOST_PP_ITERATION_4 191
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 190 && BOOST_PP_ITERATION_START_4 >= 190
#    define BOOST_PP_ITERATION_4 190
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 189 && BOOST_PP_ITERATION_START_4 >= 189
#    define BOOST_PP_ITERATION_4 189
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 188 && BOOST_PP_ITERATION_START_4 >= 188
#    define BOOST_PP_ITERATION_4 188
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 187 && BOOST_PP_ITERATION_START_4 >= 187
#    define BOOST_PP_ITERATION_4 187
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 186 && BOOST_PP_ITERATION_START_4 >= 186
#    define BOOST_PP_ITERATION_4 186
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 185 && BOOST_PP_ITERATION_START_4 >= 185
#    define BOOST_PP_ITERATION_4 185
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 184 && BOOST_PP_ITERATION_START_4 >= 184
#    define BOOST_PP_ITERATION_4 184
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 183 && BOOST_PP_ITERATION_START_4 >= 183
#    define BOOST_PP_ITERATION_4 183
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 182 && BOOST_PP_ITERATION_START_4 >= 182
#    define BOOST_PP_ITERATION_4 182
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 181 && BOOST_PP_ITERATION_START_4 >= 181
#    define BOOST_PP_ITERATION_4 181
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 180 && BOOST_PP_ITERATION_START_4 >= 180
#    define BOOST_PP_ITERATION_4 180
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 179 && BOOST_PP_ITERATION_START_4 >= 179
#    define BOOST_PP_ITERATION_4 179
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 178 && BOOST_PP_ITERATION_START_4 >= 178
#    define BOOST_PP_ITERATION_4 178
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 177 && BOOST_PP_ITERATION_START_4 >= 177
#    define BOOST_PP_ITERATION_4 177
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 176 && BOOST_PP_ITERATION_START_4 >= 176
#    define BOOST_PP_ITERATION_4 176
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 175 && BOOST_PP_ITERATION_START_4 >= 175
#    define BOOST_PP_ITERATION_4 175
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 174 && BOOST_PP_ITERATION_START_4 >= 174
#    define BOOST_PP_ITERATION_4 174
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 173 && BOOST_PP_ITERATION_START_4 >= 173
#    define BOOST_PP_ITERATION_4 173
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 172 && BOOST_PP_ITERATION_START_4 >= 172
#    define BOOST_PP_ITERATION_4 172
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 171 && BOOST_PP_ITERATION_START_4 >= 171
#    define BOOST_PP_ITERATION_4 171
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 170 && BOOST_PP_ITERATION_START_4 >= 170
#    define BOOST_PP_ITERATION_4 170
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 169 && BOOST_PP_ITERATION_START_4 >= 169
#    define BOOST_PP_ITERATION_4 169
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 168 && BOOST_PP_ITERATION_START_4 >= 168
#    define BOOST_PP_ITERATION_4 168
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 167 && BOOST_PP_ITERATION_START_4 >= 167
#    define BOOST_PP_ITERATION_4 167
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 166 && BOOST_PP_ITERATION_START_4 >= 166
#    define BOOST_PP_ITERATION_4 166
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 165 && BOOST_PP_ITERATION_START_4 >= 165
#    define BOOST_PP_ITERATION_4 165
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 164 && BOOST_PP_ITERATION_START_4 >= 164
#    define BOOST_PP_ITERATION_4 164
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 163 && BOOST_PP_ITERATION_START_4 >= 163
#    define BOOST_PP_ITERATION_4 163
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 162 && BOOST_PP_ITERATION_START_4 >= 162
#    define BOOST_PP_ITERATION_4 162
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 161 && BOOST_PP_ITERATION_START_4 >= 161
#    define BOOST_PP_ITERATION_4 161
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 160 && BOOST_PP_ITERATION_START_4 >= 160
#    define BOOST_PP_ITERATION_4 160
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 159 && BOOST_PP_ITERATION_START_4 >= 159
#    define BOOST_PP_ITERATION_4 159
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 158 && BOOST_PP_ITERATION_START_4 >= 158
#    define BOOST_PP_ITERATION_4 158
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 157 && BOOST_PP_ITERATION_START_4 >= 157
#    define BOOST_PP_ITERATION_4 157
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 156 && BOOST_PP_ITERATION_START_4 >= 156
#    define BOOST_PP_ITERATION_4 156
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 155 && BOOST_PP_ITERATION_START_4 >= 155
#    define BOOST_PP_ITERATION_4 155
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 154 && BOOST_PP_ITERATION_START_4 >= 154
#    define BOOST_PP_ITERATION_4 154
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 153 && BOOST_PP_ITERATION_START_4 >= 153
#    define BOOST_PP_ITERATION_4 153
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 152 && BOOST_PP_ITERATION_START_4 >= 152
#    define BOOST_PP_ITERATION_4 152
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 151 && BOOST_PP_ITERATION_START_4 >= 151
#    define BOOST_PP_ITERATION_4 151
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 150 && BOOST_PP_ITERATION_START_4 >= 150
#    define BOOST_PP_ITERATION_4 150
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 149 && BOOST_PP_ITERATION_START_4 >= 149
#    define BOOST_PP_ITERATION_4 149
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 148 && BOOST_PP_ITERATION_START_4 >= 148
#    define BOOST_PP_ITERATION_4 148
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 147 && BOOST_PP_ITERATION_START_4 >= 147
#    define BOOST_PP_ITERATION_4 147
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 146 && BOOST_PP_ITERATION_START_4 >= 146
#    define BOOST_PP_ITERATION_4 146
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 145 && BOOST_PP_ITERATION_START_4 >= 145
#    define BOOST_PP_ITERATION_4 145
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 144 && BOOST_PP_ITERATION_START_4 >= 144
#    define BOOST_PP_ITERATION_4 144
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 143 && BOOST_PP_ITERATION_START_4 >= 143
#    define BOOST_PP_ITERATION_4 143
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 142 && BOOST_PP_ITERATION_START_4 >= 142
#    define BOOST_PP_ITERATION_4 142
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 141 && BOOST_PP_ITERATION_START_4 >= 141
#    define BOOST_PP_ITERATION_4 141
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 140 && BOOST_PP_ITERATION_START_4 >= 140
#    define BOOST_PP_ITERATION_4 140
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 139 && BOOST_PP_ITERATION_START_4 >= 139
#    define BOOST_PP_ITERATION_4 139
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 138 && BOOST_PP_ITERATION_START_4 >= 138
#    define BOOST_PP_ITERATION_4 138
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 137 && BOOST_PP_ITERATION_START_4 >= 137
#    define BOOST_PP_ITERATION_4 137
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 136 && BOOST_PP_ITERATION_START_4 >= 136
#    define BOOST_PP_ITERATION_4 136
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 135 && BOOST_PP_ITERATION_START_4 >= 135
#    define BOOST_PP_ITERATION_4 135
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 134 && BOOST_PP_ITERATION_START_4 >= 134
#    define BOOST_PP_ITERATION_4 134
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 133 && BOOST_PP_ITERATION_START_4 >= 133
#    define BOOST_PP_ITERATION_4 133
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 132 && BOOST_PP_ITERATION_START_4 >= 132
#    define BOOST_PP_ITERATION_4 132
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 131 && BOOST_PP_ITERATION_START_4 >= 131
#    define BOOST_PP_ITERATION_4 131
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 130 && BOOST_PP_ITERATION_START_4 >= 130
#    define BOOST_PP_ITERATION_4 130
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 129 && BOOST_PP_ITERATION_START_4 >= 129
#    define BOOST_PP_ITERATION_4 129
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 128 && BOOST_PP_ITERATION_START_4 >= 128
#    define BOOST_PP_ITERATION_4 128
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 127 && BOOST_PP_ITERATION_START_4 >= 127
#    define BOOST_PP_ITERATION_4 127
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 126 && BOOST_PP_ITERATION_START_4 >= 126
#    define BOOST_PP_ITERATION_4 126
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 125 && BOOST_PP_ITERATION_START_4 >= 125
#    define BOOST_PP_ITERATION_4 125
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 124 && BOOST_PP_ITERATION_START_4 >= 124
#    define BOOST_PP_ITERATION_4 124
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 123 && BOOST_PP_ITERATION_START_4 >= 123
#    define BOOST_PP_ITERATION_4 123
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 122 && BOOST_PP_ITERATION_START_4 >= 122
#    define BOOST_PP_ITERATION_4 122
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 121 && BOOST_PP_ITERATION_START_4 >= 121
#    define BOOST_PP_ITERATION_4 121
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 120 && BOOST_PP_ITERATION_START_4 >= 120
#    define BOOST_PP_ITERATION_4 120
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 119 && BOOST_PP_ITERATION_START_4 >= 119
#    define BOOST_PP_ITERATION_4 119
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 118 && BOOST_PP_ITERATION_START_4 >= 118
#    define BOOST_PP_ITERATION_4 118
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 117 && BOOST_PP_ITERATION_START_4 >= 117
#    define BOOST_PP_ITERATION_4 117
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 116 && BOOST_PP_ITERATION_START_4 >= 116
#    define BOOST_PP_ITERATION_4 116
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 115 && BOOST_PP_ITERATION_START_4 >= 115
#    define BOOST_PP_ITERATION_4 115
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 114 && BOOST_PP_ITERATION_START_4 >= 114
#    define BOOST_PP_ITERATION_4 114
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 113 && BOOST_PP_ITERATION_START_4 >= 113
#    define BOOST_PP_ITERATION_4 113
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 112 && BOOST_PP_ITERATION_START_4 >= 112
#    define BOOST_PP_ITERATION_4 112
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 111 && BOOST_PP_ITERATION_START_4 >= 111
#    define BOOST_PP_ITERATION_4 111
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 110 && BOOST_PP_ITERATION_START_4 >= 110
#    define BOOST_PP_ITERATION_4 110
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 109 && BOOST_PP_ITERATION_START_4 >= 109
#    define BOOST_PP_ITERATION_4 109
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 108 && BOOST_PP_ITERATION_START_4 >= 108
#    define BOOST_PP_ITERATION_4 108
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 107 && BOOST_PP_ITERATION_START_4 >= 107
#    define BOOST_PP_ITERATION_4 107
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 106 && BOOST_PP_ITERATION_START_4 >= 106
#    define BOOST_PP_ITERATION_4 106
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 105 && BOOST_PP_ITERATION_START_4 >= 105
#    define BOOST_PP_ITERATION_4 105
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 104 && BOOST_PP_ITERATION_START_4 >= 104
#    define BOOST_PP_ITERATION_4 104
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 103 && BOOST_PP_ITERATION_START_4 >= 103
#    define BOOST_PP_ITERATION_4 103
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 102 && BOOST_PP_ITERATION_START_4 >= 102
#    define BOOST_PP_ITERATION_4 102
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 101 && BOOST_PP_ITERATION_START_4 >= 101
#    define BOOST_PP_ITERATION_4 101
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 100 && BOOST_PP_ITERATION_START_4 >= 100
#    define BOOST_PP_ITERATION_4 100
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 99 && BOOST_PP_ITERATION_START_4 >= 99
#    define BOOST_PP_ITERATION_4 99
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 98 && BOOST_PP_ITERATION_START_4 >= 98
#    define BOOST_PP_ITERATION_4 98
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 97 && BOOST_PP_ITERATION_START_4 >= 97
#    define BOOST_PP_ITERATION_4 97
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 96 && BOOST_PP_ITERATION_START_4 >= 96
#    define BOOST_PP_ITERATION_4 96
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 95 && BOOST_PP_ITERATION_START_4 >= 95
#    define BOOST_PP_ITERATION_4 95
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 94 && BOOST_PP_ITERATION_START_4 >= 94
#    define BOOST_PP_ITERATION_4 94
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 93 && BOOST_PP_ITERATION_START_4 >= 93
#    define BOOST_PP_ITERATION_4 93
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 92 && BOOST_PP_ITERATION_START_4 >= 92
#    define BOOST_PP_ITERATION_4 92
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 91 && BOOST_PP_ITERATION_START_4 >= 91
#    define BOOST_PP_ITERATION_4 91
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 90 && BOOST_PP_ITERATION_START_4 >= 90
#    define BOOST_PP_ITERATION_4 90
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 89 && BOOST_PP_ITERATION_START_4 >= 89
#    define BOOST_PP_ITERATION_4 89
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 88 && BOOST_PP_ITERATION_START_4 >= 88
#    define BOOST_PP_ITERATION_4 88
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 87 && BOOST_PP_ITERATION_START_4 >= 87
#    define BOOST_PP_ITERATION_4 87
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 86 && BOOST_PP_ITERATION_START_4 >= 86
#    define BOOST_PP_ITERATION_4 86
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 85 && BOOST_PP_ITERATION_START_4 >= 85
#    define BOOST_PP_ITERATION_4 85
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 84 && BOOST_PP_ITERATION_START_4 >= 84
#    define BOOST_PP_ITERATION_4 84
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 83 && BOOST_PP_ITERATION_START_4 >= 83
#    define BOOST_PP_ITERATION_4 83
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 82 && BOOST_PP_ITERATION_START_4 >= 82
#    define BOOST_PP_ITERATION_4 82
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 81 && BOOST_PP_ITERATION_START_4 >= 81
#    define BOOST_PP_ITERATION_4 81
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 80 && BOOST_PP_ITERATION_START_4 >= 80
#    define BOOST_PP_ITERATION_4 80
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 79 && BOOST_PP_ITERATION_START_4 >= 79
#    define BOOST_PP_ITERATION_4 79
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 78 && BOOST_PP_ITERATION_START_4 >= 78
#    define BOOST_PP_ITERATION_4 78
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 77 && BOOST_PP_ITERATION_START_4 >= 77
#    define BOOST_PP_ITERATION_4 77
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 76 && BOOST_PP_ITERATION_START_4 >= 76
#    define BOOST_PP_ITERATION_4 76
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 75 && BOOST_PP_ITERATION_START_4 >= 75
#    define BOOST_PP_ITERATION_4 75
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 74 && BOOST_PP_ITERATION_START_4 >= 74
#    define BOOST_PP_ITERATION_4 74
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 73 && BOOST_PP_ITERATION_START_4 >= 73
#    define BOOST_PP_ITERATION_4 73
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 72 && BOOST_PP_ITERATION_START_4 >= 72
#    define BOOST_PP_ITERATION_4 72
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 71 && BOOST_PP_ITERATION_START_4 >= 71
#    define BOOST_PP_ITERATION_4 71
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 70 && BOOST_PP_ITERATION_START_4 >= 70
#    define BOOST_PP_ITERATION_4 70
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 69 && BOOST_PP_ITERATION_START_4 >= 69
#    define BOOST_PP_ITERATION_4 69
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 68 && BOOST_PP_ITERATION_START_4 >= 68
#    define BOOST_PP_ITERATION_4 68
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 67 && BOOST_PP_ITERATION_START_4 >= 67
#    define BOOST_PP_ITERATION_4 67
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 66 && BOOST_PP_ITERATION_START_4 >= 66
#    define BOOST_PP_ITERATION_4 66
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 65 && BOOST_PP_ITERATION_START_4 >= 65
#    define BOOST_PP_ITERATION_4 65
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 64 && BOOST_PP_ITERATION_START_4 >= 64
#    define BOOST_PP_ITERATION_4 64
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 63 && BOOST_PP_ITERATION_START_4 >= 63
#    define BOOST_PP_ITERATION_4 63
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 62 && BOOST_PP_ITERATION_START_4 >= 62
#    define BOOST_PP_ITERATION_4 62
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 61 && BOOST_PP_ITERATION_START_4 >= 61
#    define BOOST_PP_ITERATION_4 61
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 60 && BOOST_PP_ITERATION_START_4 >= 60
#    define BOOST_PP_ITERATION_4 60
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 59 && BOOST_PP_ITERATION_START_4 >= 59
#    define BOOST_PP_ITERATION_4 59
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 58 && BOOST_PP_ITERATION_START_4 >= 58
#    define BOOST_PP_ITERATION_4 58
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 57 && BOOST_PP_ITERATION_START_4 >= 57
#    define BOOST_PP_ITERATION_4 57
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 56 && BOOST_PP_ITERATION_START_4 >= 56
#    define BOOST_PP_ITERATION_4 56
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 55 && BOOST_PP_ITERATION_START_4 >= 55
#    define BOOST_PP_ITERATION_4 55
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 54 && BOOST_PP_ITERATION_START_4 >= 54
#    define BOOST_PP_ITERATION_4 54
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 53 && BOOST_PP_ITERATION_START_4 >= 53
#    define BOOST_PP_ITERATION_4 53
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 52 && BOOST_PP_ITERATION_START_4 >= 52
#    define BOOST_PP_ITERATION_4 52
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 51 && BOOST_PP_ITERATION_START_4 >= 51
#    define BOOST_PP_ITERATION_4 51
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 50 && BOOST_PP_ITERATION_START_4 >= 50
#    define BOOST_PP_ITERATION_4 50
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 49 && BOOST_PP_ITERATION_START_4 >= 49
#    define BOOST_PP_ITERATION_4 49
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 48 && BOOST_PP_ITERATION_START_4 >= 48
#    define BOOST_PP_ITERATION_4 48
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 47 && BOOST_PP_ITERATION_START_4 >= 47
#    define BOOST_PP_ITERATION_4 47
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 46 && BOOST_PP_ITERATION_START_4 >= 46
#    define BOOST_PP_ITERATION_4 46
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 45 && BOOST_PP_ITERATION_START_4 >= 45
#    define BOOST_PP_ITERATION_4 45
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 44 && BOOST_PP_ITERATION_START_4 >= 44
#    define BOOST_PP_ITERATION_4 44
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 43 && BOOST_PP_ITERATION_START_4 >= 43
#    define BOOST_PP_ITERATION_4 43
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 42 && BOOST_PP_ITERATION_START_4 >= 42
#    define BOOST_PP_ITERATION_4 42
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 41 && BOOST_PP_ITERATION_START_4 >= 41
#    define BOOST_PP_ITERATION_4 41
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 40 && BOOST_PP_ITERATION_START_4 >= 40
#    define BOOST_PP_ITERATION_4 40
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 39 && BOOST_PP_ITERATION_START_4 >= 39
#    define BOOST_PP_ITERATION_4 39
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 38 && BOOST_PP_ITERATION_START_4 >= 38
#    define BOOST_PP_ITERATION_4 38
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 37 && BOOST_PP_ITERATION_START_4 >= 37
#    define BOOST_PP_ITERATION_4 37
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 36 && BOOST_PP_ITERATION_START_4 >= 36
#    define BOOST_PP_ITERATION_4 36
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 35 && BOOST_PP_ITERATION_START_4 >= 35
#    define BOOST_PP_ITERATION_4 35
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 34 && BOOST_PP_ITERATION_START_4 >= 34
#    define BOOST_PP_ITERATION_4 34
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 33 && BOOST_PP_ITERATION_START_4 >= 33
#    define BOOST_PP_ITERATION_4 33
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 32 && BOOST_PP_ITERATION_START_4 >= 32
#    define BOOST_PP_ITERATION_4 32
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 31 && BOOST_PP_ITERATION_START_4 >= 31
#    define BOOST_PP_ITERATION_4 31
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 30 && BOOST_PP_ITERATION_START_4 >= 30
#    define BOOST_PP_ITERATION_4 30
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 29 && BOOST_PP_ITERATION_START_4 >= 29
#    define BOOST_PP_ITERATION_4 29
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 28 && BOOST_PP_ITERATION_START_4 >= 28
#    define BOOST_PP_ITERATION_4 28
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 27 && BOOST_PP_ITERATION_START_4 >= 27
#    define BOOST_PP_ITERATION_4 27
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 26 && BOOST_PP_ITERATION_START_4 >= 26
#    define BOOST_PP_ITERATION_4 26
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 25 && BOOST_PP_ITERATION_START_4 >= 25
#    define BOOST_PP_ITERATION_4 25
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 24 && BOOST_PP_ITERATION_START_4 >= 24
#    define BOOST_PP_ITERATION_4 24
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 23 && BOOST_PP_ITERATION_START_4 >= 23
#    define BOOST_PP_ITERATION_4 23
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 22 && BOOST_PP_ITERATION_START_4 >= 22
#    define BOOST_PP_ITERATION_4 22
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 21 && BOOST_PP_ITERATION_START_4 >= 21
#    define BOOST_PP_ITERATION_4 21
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 20 && BOOST_PP_ITERATION_START_4 >= 20
#    define BOOST_PP_ITERATION_4 20
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 19 && BOOST_PP_ITERATION_START_4 >= 19
#    define BOOST_PP_ITERATION_4 19
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 18 && BOOST_PP_ITERATION_START_4 >= 18
#    define BOOST_PP_ITERATION_4 18
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 17 && BOOST_PP_ITERATION_START_4 >= 17
#    define BOOST_PP_ITERATION_4 17
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 16 && BOOST_PP_ITERATION_START_4 >= 16
#    define BOOST_PP_ITERATION_4 16
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 15 && BOOST_PP_ITERATION_START_4 >= 15
#    define BOOST_PP_ITERATION_4 15
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 14 && BOOST_PP_ITERATION_START_4 >= 14
#    define BOOST_PP_ITERATION_4 14
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 13 && BOOST_PP_ITERATION_START_4 >= 13
#    define BOOST_PP_ITERATION_4 13
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 12 && BOOST_PP_ITERATION_START_4 >= 12
#    define BOOST_PP_ITERATION_4 12
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 11 && BOOST_PP_ITERATION_START_4 >= 11
#    define BOOST_PP_ITERATION_4 11
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 10 && BOOST_PP_ITERATION_START_4 >= 10
#    define BOOST_PP_ITERATION_4 10
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 9 && BOOST_PP_ITERATION_START_4 >= 9
#    define BOOST_PP_ITERATION_4 9
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 8 && BOOST_PP_ITERATION_START_4 >= 8
#    define BOOST_PP_ITERATION_4 8
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 7 && BOOST_PP_ITERATION_START_4 >= 7
#    define BOOST_PP_ITERATION_4 7
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 6 && BOOST_PP_ITERATION_START_4 >= 6
#    define BOOST_PP_ITERATION_4 6
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 5 && BOOST_PP_ITERATION_START_4 >= 5
#    define BOOST_PP_ITERATION_4 5
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 4 && BOOST_PP_ITERATION_START_4 >= 4
#    define BOOST_PP_ITERATION_4 4
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 3 && BOOST_PP_ITERATION_START_4 >= 3
#    define BOOST_PP_ITERATION_4 3
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 2 && BOOST_PP_ITERATION_START_4 >= 2
#    define BOOST_PP_ITERATION_4 2
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 1 && BOOST_PP_ITERATION_START_4 >= 1
#    define BOOST_PP_ITERATION_4 1
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif
# if BOOST_PP_ITERATION_FINISH_4 <= 0 && BOOST_PP_ITERATION_START_4 >= 0
#    define BOOST_PP_ITERATION_4 0
#    include BOOST_PP_FILENAME_4
#    undef BOOST_PP_ITERATION_4
# endif


code:
/*=============================================================================
    Copyright (c) 2001-2011 Joel de Guzman

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_ERASE_10022005_1835)
#define FUSION_ERASE_10022005_1835

#include <boost/fusion/support/config.hpp>
#include <boost/mpl/erase.hpp>
#include <boost/fusion/support/tag_of.hpp>
#include <boost/fusion/algorithm/transformation/erase.hpp>
#include <boost/fusion/sequence/convert.hpp>

namespace boost { namespace mpl
{
    template <typename Tag>
    struct erase_impl;

    template <>
    struct erase_impl<fusion::fusion_sequence_tag>
    {
        template <typename Sequence, typename First, typename Last>
        struct apply
        {
            typedef typename
                fusion::result_of::erase<Sequence, First, Last>::type
            result;

            typedef typename
                fusion::result_of::convert<
                    typename fusion::detail::tag_of<Sequence>::type, result>::type
            type;
        };
    };
}}

#endif

license: mit


code:
#ifndef BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP
#define BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP

// MS compatible compilers support #pragma once
#if defined(_MSC_VER)
# pragma once
#endif

/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// assume_abstract_class.hpp:

// (C) Copyright 2008 Robert Ramey
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org for updates, documentation, and revision history.

// this is useful for compilers which don't support the boost::is_abstract

#include <boost/type_traits/is_abstract.hpp>
#include <boost/mpl/bool_fwd.hpp>

#ifndef BOOST_NO_IS_ABSTRACT

// if there is an intrinsic is_abstract defined, we don't have to do anything
#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)

// but forward to the "official" is_abstract
namespace boost {
namespace serialization {
    template<class T>
    struct is_abstract : boost::is_abstract< T > {} ;
} // namespace serialization
} // namespace boost

#else
// we have to "make" one

namespace boost {
namespace serialization {
    template<class T>
    struct is_abstract : boost::false_type {};
} // namespace serialization
} // namespace boost

// define a macro to make explicit designation of this more transparent
#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)        \
namespace boost {                                     \
namespace serialization {                             \
template<>                                            \
struct is_abstract< T > : boost::true_type {};        \
template<>                                            \
struct is_abstract< const T > : boost::true_type {};  \
}}                                                    \
/**/

#endif // BOOST_NO_IS_ABSTRACT

#endif //BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP


code:
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga        2006-2014
// (C) Copyright Microsoft Corporation  2014
//
// Distributed under the Boost Software License, Version 1.0.
//    (See accompanying file LICENSE_1_0.txt or copy at
//          http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/intrusive for documentation.
//
/////////////////////////////////////////////////////////////////////////////

#ifndef BOOST_INTRUSIVE_DETAIL_MPL_HPP
#define BOOST_INTRUSIVE_DETAIL_MPL_HPP

#ifndef BOOST_CONFIG_HPP
#  include <boost/config.hpp>
#endif

#if defined(BOOST_HAS_PRAGMA_ONCE)
#  pragma once
#endif

#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/move/detail/type_traits.hpp>
#include <cstddef>

namespace boost {
namespace intrusive {
namespace detail {

using boost::move_detail::is_same;
using boost::move_detail::add_const;
using boost::move_detail::remove_const;
using boost::move_detail::remove_cv;
using boost::move_detail::remove_reference;
using boost::move_detail::add_reference;
using boost::move_detail::remove_pointer;
using boost::move_detail::add_pointer;
using boost::move_detail::true_type;
using boost::move_detail::false_type;
using boost::move_detail::enable_if_c;
using boost::move_detail::enable_if;
using boost::move_detail::disable_if_c;
using boost::move_detail::disable_if;
using boost::move_detail::is_convertible;
using boost::move_detail::if_c;
using boost::move_detail::if_;
using boost::move_detail::is_const;
using boost::move_detail::identity;
using boost::move_detail::alignment_of;
using boost::move_detail::is_empty;
using boost::move_detail::addressof;
using boost::move_detail::integral_constant;
using boost::move_detail::enable_if_convertible;
using boost::move_detail::disable_if_convertible;
using boost::move_detail::bool_;
using boost::move_detail::true_;
using boost::move_detail::false_;
using boost::move_detail::yes_type;
using boost::move_detail::no_type;
using boost::move_detail::apply;
using boost::move_detail::eval_if_c;
using boost::move_detail::eval_if;
using boost::move_detail::unvoid_ref;
using boost::move_detail::add_const_if_c;

template<std::size_t S>
struct ls_zeros
{
   static const std::size_t value = (S & std::size_t(1)) ? 0 : (1 + ls_zeros<(S>>1u)>::value);
};

template<>
struct ls_zeros<0>
{
   static const std::size_t value = 0;
};

template<>
struct ls_zeros<1>
{
   static const std::size_t value = 0;
};

// Infrastructure for providing a default type for T::TNAME if absent.
#define BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(TNAME)     \
   template <typename T, typename DefaultType>                    \
   struct boost_intrusive_default_type_ ## TNAME                  \
   {                                                              \
      template <typename X>                                       \
      static char test(int, typename X::TNAME*);                  \
                                                                  \
      template <typename X>                                       \
      static int test(...);                                       \
                                                                  \
      struct DefaultWrap { typedef DefaultType TNAME; };          \
                                                                  \
      static const bool value = (1 == sizeof(test<T>(0, 0)));     \
                                                                  \
      typedef typename                                            \
         ::boost::intrusive::detail::if_c                         \
            <value, T, DefaultWrap>::type::TNAME type;            \
   };                                                             \
   //

#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL)   \
      typename INSTANTIATION_NS_PREFIX                                                       \
         boost_intrusive_default_type_ ## TNAME< T, TIMPL >::type                            \
//

#define BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(TNAME)\
   template <typename T, typename DefaultType>                    \
   struct boost_intrusive_eval_default_type_ ## TNAME             \
   {                                                              \
      template <typename X>                                       \
      static char test(int, typename X::TNAME*);                  \
                                                                  \
      template <typename X>                                       \
      static int test(...);                                       \
                                                                  \
      struct DefaultWrap                                          \
      { typedef typename DefaultType::type TNAME; };              \
                                                                  \
      static const bool value = (1 == sizeof(test<T>(0, 0)));     \
                                                                  \
      typedef typename                                            \
         ::boost::intrusive::detail::eval_if_c                    \
            < value                                               \
            , ::boost::intrusive::detail::identity<T>             \
            , ::boost::intrusive::detail::identity<DefaultWrap>   \
            >::type::TNAME type;                                  \
   };                                                             \
//

#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \
      typename INSTANTIATION_NS_PREFIX                                                          \
         boost_intrusive_eval_default_type_ ## TNAME< T, TIMPL >::type                          \
//

#define BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(TRAITS_PREFIX, TYPEDEF_TO_FIND) \
template <class T>\
struct TRAITS_PREFIX##_bool\
{\
   template<bool Add>\
   struct two_or_three {yes_type _[2 + Add];};\
   template <class U> static yes_type test(...);\
   template <class U> static two_or_three<U::TYPEDEF_TO_FIND> test (int);\
   static const std::size_t value = sizeof(test<T>(0));\
};\
\
template <class T>\
struct TRAITS_PREFIX##_bool_is_true\
{\
   static const bool value = TRAITS_PREFIX##_bool<T>::value > sizeof(yes_type)*2;\
};\
//

#define BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(TRAITS_NAME, FUNC_NAME) \
  template <typename U, typename Signature> \
  class TRAITS_NAME \
  { \
  private: \
  template<Signature> struct helper;\
  template<typename T> \
  static ::boost::intrusive::detail::yes_type test(helper<&T::FUNC_NAME>*); \
  template<typename T> static ::boost::intrusive::detail::no_type test(...); \
  public: \
  static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); \
  }; \
//

#define BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED(TRAITS_NAME, FUNC_NAME) \
template <typename Type> \
struct TRAITS_NAME \
{ \
   struct BaseMixin \
   { \
      void FUNC_NAME(); \
   }; \
   struct Base : public Type, public BaseMixin { Base(); }; \
   template <typename T, T t> class Helper{}; \
   template <typename U> \
   static ::boost::intrusive::detail::no_type  test(U*, Helper<void (BaseMixin::*)(), &U::FUNC_NAME>* = 0); \
   static ::boost::intrusive::detail::yes_type test(...); \
   static const bool value = sizeof(::boost::intrusive::detail::yes_type) == sizeof(test((Base*)(0))); \
};\
//

#define BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(TRAITS_NAME, FUNC_NAME) \
BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED(TRAITS_NAME##_ignore_signature, FUNC_NAME) \
\
template <typename Type, class> \
struct TRAITS_NAME \
   : public TRAITS_NAME##_ignore_signature<Type> \
{};\
//

} //namespace detail
} //namespace intrusive
} //namespace boost

#include <boost/intrusive/detail/config_end.hpp>

#endif //BOOST_INTRUSIVE_DETAIL_MPL_HPP


code:
program fox_sim

! Simulates QSO exchanges using the proposed FT8 "DXpedition" mode.
  parameter (MAXSIG=5,NCALLS=268)
  character*6 xcall(NCALLS)
  character*4 xgrid(NCALLS)
  integer isnr(NCALLS)

  character*32 fmsg(MAXSIG),fm
  character*22 hmsg(MAXSIG),hm
  character*16 log
  character*6 called(MAXSIG)
  character*4 gcalled(MAXSIG)
  character*6 MyCall
  character*4 MyGrid
  character*8 arg
  character*1 c1,c2,c3,c4
  integer ntot(MAXSIG),irate(MAXSIG),ntimes(MAXSIG)
  logical logit
  common/dxpfifo/nc,isnr,xcall,xgrid

  nargs=iargc()
  if(nargs.ne.2 .and. nargs.ne.4) then
     print*,'Usage: fox_sim  nseq maxtimes'
     print*,'       fox_sim  nseq maxtimes nsig fail'
     print*,' '
     print*,' nseq:     number of T/R sequences to execute'
     print*,' maxtimes: number of repeats of same Tx message'
     print*,' nsig:     number of simultaneous Tx sigals'
     print*,' fail:     receiving error rate'
     go to 999
  endif
  ii1=1
  ii2=5
  jj1=0
  jj2=5
  nseq=80
  if(nargs.ge.2) then
     call getarg(1,arg)
     read(arg,*) nseq
     call getarg(2,arg)
     read(arg,*) maxtimes
  endif
  if(nargs.eq.4) then
     call getarg(3,arg)
     read(arg,*) nsig
     call getarg(4,arg)
     read(arg,*) fail
     ii1=nsig
     ii2=nsig
     jj1=nint(10*fail)
     jj2=nint(10*fail)
  endif

! Read a file with calls and grids; insert random S/N values.
! This is used in place of an operator-selected FIFO
  open(10,file='xcall.txt',status='old')
  do i=1,NCALLS
     read(10,1000) xcall(i),xgrid(i)
1000 format(a6,7x,a4)
     if(i.ne.-99) cycle
     j=mod(i-1,26)
     c1=char(ichar('A')+j)
     k=mod((i-1)/26,26)
     c2=char(ichar('A')+k)
     n=mod((i-1)/260,10)
     c3=char(ichar('0')+n)
     xcall(i)='K'//c2//c3//c1//c1//c1

     j=mod(i-1,18)
     c1=char(ichar('A')+j)
     k=mod((i-1)/18,18)
     c2=char(ichar('A')+k)
     n=mod((i-1)/10,10)
     c4=char(ichar('0')+n)
     n=mod((i-1)/100,10)
     c3=char(ichar('0')+n)
     xgrid(i)=c1//c2//c3//c4

     call random_number(x)
     isnr(i)=-20+int(40*x)
  enddo
!  close(10)

! Write headings for the summary file
  minutes=nseq/4
  write(13,1002) nseq,minutes,maxtimes
1002 format(/'Nseq:',i4,'   Minutes:',i3,'   Maxtimes:',i2//                   &
    18x,'Logged QSOs',22x,'Rate (QSOs/hour)'/                                  &
    'fail Nsig: 1     2     3     4     5          1     2     3     4     5'/ &
    71('-'))

  write(*,1003)
1003 format('Seq  s n Fox messages                      Hound messages    Logged info        i Rate'/87('-'))

  ntot=0
  irate=0
  MyCall='KH1DX'
  MyGrid='AJ10'

  do jj=jj1,jj2                        !Loop over Rx failure rates
     fail=0.1*jj
     do ii=ii1,ii2                     !Loop over range of nsig
        nc=0                           !Set FIFO pointer to top
        ntimes=1
        nsig=ii
        nlogged=0
        fmsg="CQ KH1DX AJ10"
        hmsg=""
        called="      "
        do iseq=0,nseq                 !Loop over specified number of sequences
           if(iand(iseq,1).eq.0) then
              do j=1,nsig              !Loop over Fox's Tx slots
                 fm=fmsg(j)
                 hm=hmsg(j)

! Call fox_tx to determine the next Tx message for this slot
                 call fox_tx(maxtimes,fail,called(j),gcalled(j),hm,fm,    &
                      ntimes(j),log,logit)

                 fmsg(j)=fm
                 if(logit) then
! Log this QSO
                    nlogged=nlogged+1
                    nrate=0
                    if(iseq.gt.0) nrate=nint(nlogged*240.0/iseq)
                    write(*,1010) iseq,j,ntimes(j),fmsg(j),log,nlogged,nrate
1010                format(i4.4,2i2,1x,a32,20x,a16,2i4)
                    ! call log_routine()
                 else
                    write(*,1010) iseq,j,ntimes(j),fmsg(j)
                 endif
              enddo
              ! call transmit()
           endif

           if(iand(iseq,1).eq.1) then
              do j=1,nsig              !Listen for expected responses
                 fm=fmsg(j)
                 call fox_rx(fail,called(j),fm,hm)
                 if(j.ge.2) then
                    if(hm.eq.hmsg(j-1)) hm=""
                 endif
                 hmsg(j)=hm
                 write(*,1020) iseq,j,hmsg(j)
1020             format(i4.4,i2,37x,a22)
              enddo
           endif
           write(*,1021)
1021       format(87('-'))
        enddo
        ntot(ii)=nlogged
        irate(ii)=0
        if(iseq.gt.0) irate(ii)=nint(nlogged*3600.0/(15*iseq))
        write(*,1030) nsig,fail,nlogged,nc
1030    format(/'Nsig:',i3,'   Fail:',f4.1,'   Logged QSOs:',i4,      &
             '   Final nc:',i4)
     enddo

! Write the summary file
     write(13,1100) fail,ntot,irate
1100 format(f4.1,2x,5i6,5x,5i6)
  enddo

999 end program fox_sim


code:
//---------------------------------------------------------------------------//
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
//
// Distributed under the Boost Software License, Version 1.0
// See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt
//
// See http://boostorg.github.com/compute for more information.
//---------------------------------------------------------------------------//

#ifndef BOOST_COMPUTE_ALGORITHM_IS_PARTITIONED_HPP
#define BOOST_COMPUTE_ALGORITHM_IS_PARTITIONED_HPP

#include <boost/compute/system.hpp>
#include <boost/compute/command_queue.hpp>
#include <boost/compute/algorithm/find_if.hpp>
#include <boost/compute/algorithm/find_if_not.hpp>

namespace boost {
namespace compute {

/// Returns \c true if the values in the range [\p first, \p last)
/// are partitioned according to \p predicate.
template<class InputIterator, class UnaryPredicate>
inline bool is_partitioned(InputIterator first,
                           InputIterator last,
                           UnaryPredicate predicate,
                           command_queue &queue = system::default_queue())
{
    return ::boost::compute::find_if(
               ::boost::compute::find_if_not(first,
                                             last,
                                             predicate,
                                             queue),
                last,
                predicate,
                queue) == last;
}

} // end compute namespace
} // end boost namespace

#endif // BOOST_COMPUTE_ALGORITHM_PARTITION_HPP


code:
#ifndef BOOST_CORE_CHECKED_DELETE_HPP
#define BOOST_CORE_CHECKED_DELETE_HPP

// MS compatible compilers support #pragma once

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif

//
//  boost/checked_delete.hpp
//
//  Copyright (c) 2002, 2003 Peter Dimov
//  Copyright (c) 2003 Daniel Frey
//  Copyright (c) 2003 Howard Hinnant
//
//  Distributed under the Boost Software License, Version 1.0. (See
//  accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)
//
//  See http://www.boost.org/libs/core/doc/html/core/checked_delete.html for documentation.
//

namespace boost
{

// verify that types are complete for increased safety

template<class T> inline void checked_delete(T * x)
{
    // intentionally complex - simplification causes regressions
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete x;
}

template<class T> inline void checked_array_delete(T * x)
{
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete [] x;
}

template<class T> struct checked_deleter
{
    typedef void result_type;
    typedef T * argument_type;

    void operator()(T * x) const
    {
        // boost:: disables ADL
        boost::checked_delete(x);
    }
};

template<class T> struct checked_array_deleter
{
    typedef void result_type;
    typedef T * argument_type;

    void operator()(T * x) const
    {
        boost::checked_array_delete(x);
    }
};

} // namespace boost

#endif  // #ifndef BOOST_CORE_CHECKED_DELETE_HPP


code:
// Copyright David Abrahams 2002.
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef ITERATOR_DWA2002510_HPP
# define ITERATOR_DWA2002510_HPP

# include <boost/python/detail/prefix.hpp>

# include <boost/python/class.hpp>
# include <boost/python/return_value_policy.hpp>
# include <boost/python/return_by_value.hpp>
# include <boost/python/handle.hpp>
# include <boost/python/make_function.hpp>

# include <boost/python/object/iterator_core.hpp>
# include <boost/python/object/class_detail.hpp>
# include <boost/python/object/function_object.hpp>

# include <boost/mpl/vector/vector10.hpp>
# include <boost/mpl/if.hpp>

# include <boost/python/detail/raw_pyobject.hpp>

# include <boost/type.hpp>

# include <boost/type_traits/is_same.hpp>
# include <boost/type_traits/add_reference.hpp>
# include <boost/type_traits/add_const.hpp>

# include <boost/detail/iterator.hpp>

namespace boost { namespace python { namespace objects {

// CallPolicies for the next() method of iterators. We don't want
// users to have to explicitly specify that the references returned by
// iterators are copied, so we just replace the result_converter from
// the default_iterator_call_policies with a permissive one which
// always copies the result.
typedef return_value_policy<return_by_value> default_iterator_call_policies;

// Instantiations of these are wrapped to produce Python iterators.
template <class NextPolicies, class Iterator>
struct iterator_range
{
    iterator_range(object sequence, Iterator start, Iterator finish);

    typedef boost::detail::iterator_traits<Iterator> traits_t;

    struct next
    {
        typedef typename mpl::if_<
            is_reference<
                typename traits_t::reference
            >
          , typename traits_t::reference
          , typename traits_t::value_type
        >::type result_type;

        result_type
        operator()(iterator_range<NextPolicies,Iterator>& self)
        {
            if (self.m_start == self.m_finish)
                stop_iteration_error();
            return *self.m_start++;
        }

# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
        // CWPro8 has a codegen problem when this is an empty class
        int garbage;
# endif
    };

    typedef next next_fn;

    object m_sequence; // Keeps the sequence alive while iterating.
    Iterator m_start;
    Iterator m_finish;
};

namespace detail
{
  // Get a Python class which contains the given iterator and
  // policies, creating it if necessary. Requires: NextPolicies is
  // default-constructible.
  template <class Iterator, class NextPolicies>
  object demand_iterator_class(char const* name, Iterator* = 0, NextPolicies const& policies = NextPolicies())
  {
      typedef iterator_range<NextPolicies,Iterator> range_;

      // Check the registry. If one is already registered, return it.
      handle<> class_obj(
          objects::registered_class_object(python::type_id<range_>()));

      if (class_obj.get() != 0)
          return object(class_obj);

      typedef typename range_::next_fn next_fn;
      typedef typename next_fn::result_type result_type;

      return class_<range_>(name, no_init)
          .def("__iter__", identity_function())
          .def(
#if PY_VERSION_HEX >= 0x03000000
              "__next__"
#else
              "next"
#endif
            , make_function(
                next_fn()
              , policies
              , mpl::vector2<result_type,range_&>()
            ));
  }

  // A function object which builds an iterator_range.
  template <
      class Target
    , class Iterator
    , class Accessor1
    , class Accessor2
    , class NextPolicies
  >
  struct py_iter_
  {
      py_iter_(Accessor1 const& get_start, Accessor2 const& get_finish)
        : m_get_start(get_start)
        , m_get_finish(get_finish)
      {}

      // Extract an object x of the Target type from the first Python
      // argument, and invoke get_start(x)/get_finish(x) to produce
      // iterators, which are used to construct a new iterator_range<>
      // object that gets wrapped into a Python iterator.
      iterator_range<NextPolicies,Iterator>
      operator()(back_reference<Target&> x) const
      {
          // Make sure the Python class is instantiated.
          detail::demand_iterator_class("iterator", (Iterator*)0, NextPolicies());

          return iterator_range<NextPolicies,Iterator>(
              x.source()
            , m_get_start(x.get())
            , m_get_finish(x.get())
          );
      }
   private:
      Accessor1 m_get_start;
      Accessor2 m_get_finish;
  };

  template <class Target, class Iterator, class NextPolicies, class Accessor1, class Accessor2>
  inline object make_iterator_function(
      Accessor1 const& get_start
    , Accessor2 const& get_finish
    , NextPolicies const& /*next_policies*/
    , Iterator const& (*)()
    , boost::type<Target>*
    , int
  )
  {
      return make_function(
          py_iter_<Target,Iterator,Accessor1,Accessor2,NextPolicies>(get_start, get_finish)
        , default_call_policies()
        , mpl::vector2<iterator_range<NextPolicies,Iterator>, back_reference<Target&> >()
      );
  }

  template <class Target, class Iterator, class NextPolicies, class Accessor1, class Accessor2>
  inline object make_iterator_function(
      Accessor1 const& get_start
    , Accessor2 const& get_finish
    , NextPolicies const& next_policies
    , Iterator& (*)()
    , boost::type<Target>*
    , ...)
  {
      return make_iterator_function(
          get_start
        , get_finish
        , next_policies
        , (Iterator const&(*)())0
        , (boost::type<Target>*)0
        , 0
      );
  }

}

// Create a Python callable object which accepts a single argument
// convertible to the C++ Target type and returns a Python
// iterator. The Python iterator uses get_start(x) and get_finish(x)
// (where x is an instance of Target) to produce begin and end
// iterators for the range, and an instance of NextPolicies is used as
// CallPolicies for the Python iterator's next() function.
template <class Target, class NextPolicies, class Accessor1, class Accessor2>
inline object make_iterator_function(
    Accessor1 const& get_start
  , Accessor2 const& get_finish
  , NextPolicies const& next_policies
  , boost::type<Target>* = 0
)
{
    typedef typename Accessor1::result_type iterator;
    typedef typename add_const<iterator>::type iterator_const;
    typedef typename add_reference<iterator_const>::type iterator_cref;

    return detail::make_iterator_function(
        get_start
      , get_finish
      , next_policies
      , (iterator_cref(*)())0
      , (boost::type<Target>*)0
      , 0
    );
}

//
// implementation
//
template <class NextPolicies, class Iterator>
inline iterator_range<NextPolicies,Iterator>::iterator_range(
    object sequence, Iterator start, Iterator finish)
    : m_sequence(sequence), m_start(start), m_finish(finish)
{
}

}}} // namespace boost::python::objects

#endif // ITERATOR_DWA2002510_HPP


code:
//  (C) Copyright John Maddock 2008.
//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#ifndef BOOST_MATH_SPECIAL_NEXT_HPP
#define BOOST_MATH_SPECIAL_NEXT_HPP

#ifdef _MSC_VER
#pragma once
#endif

#include <boost/math/special_functions/math_fwd.hpp>
#include <boost/math/policies/error_handling.hpp>
#include <boost/math/special_functions/fpclassify.hpp>
#include <boost/math/special_functions/sign.hpp>
#include <boost/math/special_functions/trunc.hpp>

#include <float.h>

#if !defined(_CRAYC) && !defined(__CUDACC__) && (!defined(__GNUC__) || (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 3)))
#if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(__SSE2__)
#include "xmmintrin.h"
#define BOOST_MATH_CHECK_SSE2
#endif
#endif

namespace boost{ namespace math{

namespace detail{

template <class T>
inline T get_smallest_value(mpl::true_ const&)
{
   //
   // numeric_limits lies about denorms being present - particularly
   // when this can be turned on or off at runtime, as is the case
   // when using the SSE2 registers in DAZ or FTZ mode.
   //
   static const T m = std::numeric_limits<T>::denorm_min();
#ifdef BOOST_MATH_CHECK_SSE2
   return (_mm_getcsr() & (_MM_FLUSH_ZERO_ON | 0x40)) ? tools::min_value<T>() : m;;
#else
   return ((tools::min_value<T>() / 2) == 0) ? tools::min_value<T>() : m;
#endif
}

template <class T>
inline T get_smallest_value(mpl::false_ const&)
{
   return tools::min_value<T>();
}

template <class T>
inline T get_smallest_value()
{
#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1310)
   return get_smallest_value<T>(mpl::bool_<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::has_denorm == 1)>());
#else
   return get_smallest_value<T>(mpl::bool_<std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::has_denorm == std::denorm_present)>());
#endif
}

//
// Returns the smallest value that won't generate denorms when
// we calculate the value of the least-significant-bit:
//
template <class T>
T get_min_shift_value();

template <class T>
struct min_shift_initializer
{
   struct init
   {
      init()
      {
         do_init();
      }
      static void do_init()
      {
         get_min_shift_value<T>();
      }
      void force_instantiate()const{}
   };
   static const init initializer;
   static void force_instantiate()
   {
      initializer.force_instantiate();
   }
};

template <class T>
const typename min_shift_initializer<T>::init min_shift_initializer<T>::initializer;

template <class T>
inline T get_min_shift_value()
{
   BOOST_MATH_STD_USING
   static const T val = ldexp(tools::min_value<T>(), tools::digits<T>() + 1);
   min_shift_initializer<T>::force_instantiate();

   return val;
}

template <class T, class Policy>
T float_next_imp(const T& val, const Policy& pol)
{
   BOOST_MATH_STD_USING
   int expon;
   static const char* function = "float_next<%1%>(%1%)";

   int fpclass = (boost::math::fpclassify)(val);

   if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
   {
      if(val < 0)
         return -tools::max_value<T>();
      return policies::raise_domain_error<T>(
         function,
         "Argument must be finite, but got %1%", val, pol);
   }

   if(val >= tools::max_value<T>())
      return policies::raise_overflow_error<T>(function, 0, pol);

   if(val == 0)
      return detail::get_smallest_value<T>();

   if((fpclass != (int)FP_SUBNORMAL) && (fpclass != (int)FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != -tools::min_value<T>()))
   {
      //
      // Special case: if the value of the least significant bit is a denorm, and the result
      // would not be a denorm, then shift the input, increment, and shift back.
      // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set.
      //
      return ldexp(float_next(T(ldexp(val, 2 * tools::digits<T>())), pol), -2 * tools::digits<T>());
   }

   if(-0.5f == frexp(val, &expon))
      --expon; // reduce exponent when val is a power of two, and negative.
   T diff = ldexp(T(1), expon - tools::digits<T>());
   if(diff == 0)
      diff = detail::get_smallest_value<T>();
   return val + diff;
}

}

template <class T, class Policy>
inline typename tools::promote_args<T>::type float_next(const T& val, const Policy& pol)
{
   typedef typename tools::promote_args<T>::type result_type;
   return detail::float_next_imp(static_cast<result_type>(val), pol);
}

#if 0 //def BOOST_MSVC
//
// We used to use ::_nextafter here, but doing so fails when using
// the SSE2 registers if the FTZ or DAZ flags are set, so use our own
// - albeit slower - code instead as at least that gives the correct answer.
//
template <class Policy>
inline double float_next(const double& val, const Policy& pol)
{
   static const char* function = "float_next<%1%>(%1%)";

   if(!(boost::math::isfinite)(val) && (val > 0))
      return policies::raise_domain_error<double>(
         function,
         "Argument must be finite, but got %1%", val, pol);

   if(val >= tools::max_value<double>())
      return policies::raise_overflow_error<double>(function, 0, pol);

   return ::_nextafter(val, tools::max_value<double>());
}
#endif

template <class T>
inline typename tools::promote_args<T>::type float_next(const T& val)
{
   return float_next(val, policies::policy<>());
}

namespace detail{

template <class T, class Policy>
T float_prior_imp(const T& val, const Policy& pol)
{
   BOOST_MATH_STD_USING
   int expon;
   static const char* function = "float_prior<%1%>(%1%)";

   int fpclass = (boost::math::fpclassify)(val);

   if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
   {
      if(val > 0)
         return tools::max_value<T>();
      return policies::raise_domain_error<T>(
         function,
         "Argument must be finite, but got %1%", val, pol);
   }

   if(val <= -tools::max_value<T>())
      return -policies::raise_overflow_error<T>(function, 0, pol);

   if(val == 0)
      return -detail::get_smallest_value<T>();

   if((fpclass != (int)FP_SUBNORMAL) && (fpclass != (int)FP_ZERO) && (fabs(val) < detail::get_min_shift_value<T>()) && (val != tools::min_value<T>()))
   {
      //
      // Special case: if the value of the least significant bit is a denorm, and the result
      // would not be a denorm, then shift the input, increment, and shift back.
      // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set.
      //
      return ldexp(float_prior(T(ldexp(val, 2 * tools::digits<T>())), pol), -2 * tools::digits<T>());
   }

   T remain = frexp(val, &expon);
   if(remain == 0.5)
      --expon; // when val is a power of two we must reduce the exponent
   T diff = ldexp(T(1), expon - tools::digits<T>());
   if(diff == 0)
      diff = detail::get_smallest_value<T>();
   return val - diff;
}

}

template <class T, class Policy>
inline typename tools::promote_args<T>::type float_prior(const T& val, const Policy& pol)
{
   typedef typename tools::promote_args<T>::type result_type;
   return detail::float_prior_imp(static_cast<result_type>(val), pol);
}

#if 0 //def BOOST_MSVC
//
// We used to use ::_nextafter here, but doing so fails when using
// the SSE2 registers if the FTZ or DAZ flags are set, so use our own
// - albeit slower - code instead as at least that gives the correct answer.
//
template <class Policy>
inline double float_prior(const double& val, const Policy& pol)
{
   static const char* function = "float_prior<%1%>(%1%)";

   if(!(boost::math::isfinite)(val) && (val < 0))
      return policies::raise_domain_error<double>(
         function,
         "Argument must be finite, but got %1%", val, pol);

   if(val <= -tools::max_value<double>())
      return -policies::raise_overflow_error<double>(function, 0, pol);

   return ::_nextafter(val, -tools::max_value<double>());
}
#endif

template <class T>
inline typename tools::promote_args<T>::type float_prior(const T& val)
{
   return float_prior(val, policies::policy<>());
}

template <class T, class U, class Policy>
inline typename tools::promote_args<T, U>::type nextafter(const T& val, const U& direction, const Policy& pol)
{
   typedef typename tools::promote_args<T, U>::type result_type;
   return val < direction ? boost::math::float_next<result_type>(val, pol) : val == direction ? val : boost::math::float_prior<result_type>(val, pol);
}

template <class T, class U>
inline typename tools::promote_args<T, U>::type nextafter(const T& val, const U& direction)
{
   return nextafter(val, direction, policies::policy<>());
}

namespace detail{

template <class T, class Policy>
T float_distance_imp(const T& a, const T& b, const Policy& pol)
{
   BOOST_MATH_STD_USING
   //
   // Error handling:
   //
   static const char* function = "float_distance<%1%>(%1%, %1%)";
   if(!(boost::math::isfinite)(a))
      return policies::raise_domain_error<T>(
         function,
         "Argument a must be finite, but got %1%", a, pol);
   if(!(boost::math::isfinite)(b))
      return policies::raise_domain_error<T>(
         function,
         "Argument b must be finite, but got %1%", b, pol);
   //
   // Special cases:
   //
   if(a > b)
      return -float_distance(b, a, pol);
   if(a == b)
      return 0;
   if(a == 0)
      return 1 + fabs(float_distance(static_cast<T>((b < 0) ? T(-detail::get_smallest_value<T>()) : detail::get_smallest_value<T>()), b, pol));
   if(b == 0)
      return 1 + fabs(float_distance(static_cast<T>((a < 0) ? T(-detail::get_smallest_value<T>()) : detail::get_smallest_value<T>()), a, pol));
   if(boost::math::sign(a) != boost::math::sign(b))
      return 2 + fabs(float_distance(static_cast<T>((b < 0) ? T(-detail::get_smallest_value<T>()) : detail::get_smallest_value<T>()), b, pol))
         + fabs(float_distance(static_cast<T>((a < 0) ? T(-detail::get_smallest_value<T>()) : detail::get_smallest_value<T>()), a, pol));
   //
   // By the time we get here, both a and b must have the same sign, we want
   // b > a and both postive for the following logic:
   //
   if(a < 0)
      return float_distance(static_cast<T>(-b), static_cast<T>(-a), pol);

   BOOST_ASSERT(a >= 0);
   BOOST_ASSERT(b >= a);

   int expon;
   //
   // Note that if a is a denorm then the usual formula fails
   // because we actually have fewer than tools::digits<T>()
   // significant bits in the representation:
   //
   frexp(((boost::math::fpclassify)(a) == (int)FP_SUBNORMAL) ? tools::min_value<T>() : a, &expon);
   T upper = ldexp(T(1), expon);
   T result = 0;
   expon = tools::digits<T>() - expon;
   //
   // If b is greater than upper, then we *must* split the calculation
   // as the size of the ULP changes with each order of magnitude change:
   //
   if(b > upper)
   {
      result = float_distance(upper, b);
   }
   //
   // Use compensated double-double addition to avoid rounding
   // errors in the subtraction:
   //
   T mb, x, y, z;
   if(((boost::math::fpclassify)(a) == (int)FP_SUBNORMAL) || (b - a < tools::min_value<T>()))
   {
      //
      // Special case - either one end of the range is a denormal, or else the difference is.
      // The regular code will fail if we're using the SSE2 registers on Intel and either
      // the FTZ or DAZ flags are set.
      //
      T a2 = ldexp(a, tools::digits<T>());
      T b2 = ldexp(b, tools::digits<T>());
      mb = -(std::min)(T(ldexp(upper, tools::digits<T>())), b2);
      x = a2 + mb;
      z = x - a2;
      y = (a2 - (x - z)) + (mb - z);

      expon -= tools::digits<T>();
   }
   else
   {
      mb = -(std::min)(upper, b);
      x = a + mb;
      z = x - a;
      y = (a - (x - z)) + (mb - z);
   }
   if(x < 0)
   {
      x = -x;
      y = -y;
   }
   result += ldexp(x, expon) + ldexp(y, expon);
   //
   // Result must be an integer:
   //
   BOOST_ASSERT(result == floor(result));
   return result;
}

}

template <class T, class U, class Policy>
inline typename tools::promote_args<T, U>::type float_distance(const T& a, const U& b, const Policy& pol)
{
   typedef typename tools::promote_args<T, U>::type result_type;
   return detail::float_distance_imp(static_cast<result_type>(a), static_cast<result_type>(b), pol);
}

template <class T, class U>
typename tools::promote_args<T, U>::type float_distance(const T& a, const U& b)
{
   return boost::math::float_distance(a, b, policies::policy<>());
}

namespace detail{

template <class T, class Policy>
T float_advance_imp(T val, int distance, const Policy& pol)
{
   BOOST_MATH_STD_USING
   //
   // Error handling:
   //
   static const char* function = "float_advance<%1%>(%1%, int)";

   int fpclass = (boost::math::fpclassify)(val);

   if((fpclass == (int)FP_NAN) || (fpclass == (int)FP_INFINITE))
      return policies::raise_domain_error<T>(
         function,
         "Argument val must be finite, but got %1%", val, pol);

   if(val < 0)
      return -float_advance(-val, -distance, pol);
   if(distance == 0)
      return val;
   if(distance == 1)
      return float_next(val, pol);
   if(distance == -1)
      return float_prior(val, pol);

   if(fabs(val) < detail::get_min_shift_value<T>())
   {
      //
      // Special case: if the value of the least significant bit is a denorm,
      // implement in terms of float_next/float_prior.
      // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set.
      //
      if(distance > 0)
      {
         do{ val = float_next(val, pol); } while(--distance);
      }
      else
      {
         do{ val = float_prior(val, pol); } while(++distance);
      }
      return val;
   }

   int expon;
   frexp(val, &expon);
   T limit = ldexp((distance < 0 ? T(0.5f) : T(1)), expon);
   if(val <= tools::min_value<T>())
   {
      limit = sign(T(distance)) * tools::min_value<T>();
   }
   T limit_distance = float_distance(val, limit);
   while(fabs(limit_distance) < abs(distance))
   {
      distance -= itrunc(limit_distance);
      val = limit;
      if(distance < 0)
      {
         limit /= 2;
         expon--;
      }
      else
      {
         limit *= 2;
         expon++;
      }
      limit_distance = float_distance(val, limit);
      if(distance && (limit_distance == 0))
      {
         return policies::raise_evaluation_error<T>(function, "Internal logic failed while trying to increment floating point value %1%: most likely your FPU is in non-IEEE conforming mode.", val, pol);
      }
   }
   if((0.5f == frexp(val, &expon)) && (distance < 0))
      --expon;
   T diff = 0;
   if(val != 0)
      diff = distance * ldexp(T(1), expon - tools::digits<T>());
   if(diff == 0)
      diff = distance * detail::get_smallest_value<T>();
   return val += diff;
}

}

template <class T, class Policy>
inline typename tools::promote_args<T>::type float_advance(T val, int distance, const Policy& pol)
{
   typedef typename tools::promote_args<T>::type result_type;
   return detail::float_advance_imp(static_cast<result_type>(val), distance, pol);
}

template <class T>
inline typename tools::promote_args<T>::type float_advance(const T& val, int distance)
{
   return boost::math::float_advance(val, distance, policies::policy<>());
}

}} // namespaces

#endif // BOOST_MATH_SPECIAL_NEXT_HPP


code:
// ----------------------------------------------------------------------------
// format.hpp :  primary header
// ----------------------------------------------------------------------------

//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
//  subject to the Boost Software License, Version 1.0. (See accompanying
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org/libs/format for library home page

// ----------------------------------------------------------------------------

#ifndef BOOST_FORMAT_HPP
#define BOOST_FORMAT_HPP

#include <vector>
#include <string>
#include <boost/detail/workaround.hpp>
#include <boost/config.hpp>

#ifndef BOOST_NO_STD_LOCALE
#include <locale>
#endif

// ***   Compatibility framework
#include <boost/format/detail/compat_workarounds.hpp>

#ifdef BOOST_NO_LOCALE_ISIDIGIT
#include <cctype>  // we'll use the non-locale  <cctype>'s std::isdigit(int)
#endif

// ****  Forward declarations ----------------------------------
#include <boost/format/format_fwd.hpp>     // basic_format<Ch,Tr>, and other frontends
#include <boost/format/internals_fwd.hpp>  // misc forward declarations for internal use

// ****  Auxiliary structs (stream_format_state<Ch,Tr> , and format_item<Ch,Tr> )
#include <boost/format/internals.hpp>

// ****  Format  class  interface --------------------------------
#include <boost/format/format_class.hpp>

// **** Exceptions -----------------------------------------------
#include <boost/format/exceptions.hpp>

// **** Implementation -------------------------------------------
#include <boost/format/format_implementation.hpp>   // member functions
#include <boost/format/group.hpp>                   // class for grouping arguments
#include <boost/format/feed_args.hpp>               // argument-feeding functions
#include <boost/format/parsing.hpp>                 // format-string parsing (member-)functions

// **** Implementation of the free functions ----------------------
#include <boost/format/free_funcs.hpp>

// *** Undefine 'local' macros :
#include <boost/format/detail/unset_macros.hpp>

#endif // BOOST_FORMAT_HPP


code:
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//

// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
// -- DO NOT modify by hand!

namespace boost { namespace mpl { namespace aux {

/// forward declaration

template<
      int N
    , typename First
    , typename Last
    , typename State
    , typename ForwardOp
    >
struct iter_fold_impl;

template< int N >
struct iter_fold_chunk;

template<> struct iter_fold_chunk<0>
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef First iter0;
        typedef State state0;
        typedef state0 state;
        typedef iter0 iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template<> struct iter_fold_chunk<1>
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef First iter0;
        typedef State state0;
        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
        typedef typename mpl::next<iter0>::type iter1;

        typedef state1 state;
        typedef iter1 iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template<> struct iter_fold_chunk<2>
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef First iter0;
        typedef State state0;
        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
        typedef typename mpl::next<iter0>::type iter1;
        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
        typedef typename mpl::next<iter1>::type iter2;

        typedef state2 state;
        typedef iter2 iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template<> struct iter_fold_chunk<3>
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef First iter0;
        typedef State state0;
        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
        typedef typename mpl::next<iter0>::type iter1;
        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
        typedef typename mpl::next<iter1>::type iter2;
        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
        typedef typename mpl::next<iter2>::type iter3;

        typedef state3 state;
        typedef iter3 iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template<> struct iter_fold_chunk<4>
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef First iter0;
        typedef State state0;
        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
        typedef typename mpl::next<iter0>::type iter1;
        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
        typedef typename mpl::next<iter1>::type iter2;
        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
        typedef typename mpl::next<iter2>::type iter3;
        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
        typedef typename mpl::next<iter3>::type iter4;

        typedef state4 state;
        typedef iter4 iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template< int N >
struct iter_fold_chunk
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef iter_fold_impl<
              4
            , First
            , Last
            , State
            , ForwardOp
            > chunk_;

        typedef iter_fold_impl<
              ( (N - 4) < 0 ? 0 : N - 4 )
            , typename chunk_::iterator
            , Last
            , typename chunk_::state
            , ForwardOp
            > res_;

        typedef typename res_::state state;
        typedef typename res_::iterator iterator;
    };
};

template<
      typename First
    , typename Last
    , typename State
    , typename ForwardOp
    >
struct iter_fold_step;

template<
      typename Last
    , typename State
    >
struct iter_fold_null_step
{
    typedef Last iterator;
    typedef State state;
};

template<>
struct iter_fold_chunk< -1 >
{
    template<
          typename First
        , typename Last
        , typename State
        , typename ForwardOp
        >
    struct result_
    {
        typedef typename if_<
              typename is_same< First,Last >::type
            , iter_fold_null_step< Last,State >
            , iter_fold_step< First,Last,State,ForwardOp >
            >::type res_;

        typedef typename res_::state state;
        typedef typename res_::iterator iterator;
    };

    /// ETI workaround
    template<> struct result_< int,int,int,int >
    {
        typedef int state;
        typedef int iterator;
    };

};

template<
      typename First
    , typename Last
    , typename State
    , typename ForwardOp
    >
struct iter_fold_step
{
    typedef iter_fold_chunk< -1 >::template result_<
          typename mpl::next<First>::type
        , Last
        , typename apply2< ForwardOp,State,First >::type
        , ForwardOp
        > chunk_;

    typedef typename chunk_::state state;
    typedef typename chunk_::iterator iterator;
};

template<
      int N
    , typename First
    , typename Last
    , typename State
    , typename ForwardOp
    >
struct iter_fold_impl
    : iter_fold_chunk<N>
        ::template result_< First,Last,State,ForwardOp >
{
};

}}}