I took the code out of the bigger program and made another small program to show the bug:
=====================================
#include <stdio.h> #include <cstdlib> #include <bitset> #include <strings.h> #include <string.h> #include <iostream>
template <const int mysize,class mytype> const char * mybitset(mytype myobj){ return std::bitset<mysize>(myobj).to_string().c_str(); } template <const int mysize> const char * mybitset2(int myobj){ return std::bitset<mysize>(myobj).to_string().c_str(); }
#define bitsetvalue 0x255+0xf000
int main (int argc, char *argv[]) { printf("COMPILER VERSION %s\n",__VERSION__); printf("bitset 32 %s \n",std::bitset<32>(bitsetvalue).to_string().c_str()); printf("bitset 16 %s \n",std::bitset<16>(bitsetvalue).to_string().c_str()); printf("bitset 15 %s \n",std::bitset<15>(bitsetvalue).to_string().c_str()); printf("testing mybitset 32 %s \n",mybitset<32,int>(bitsetvalue)); printf("testing mybitset 16 %s \n",mybitset<16,int>(bitsetvalue)); printf("testing mybitset 15 %s \n",mybitset<15,int>(bitsetvalue)); printf("testing mybitset 15 %s \n",mybitset<15>(bitsetvalue)); printf("testing mybitset %s size %ld \n",mybitset<32>(bitsetvalue),strlen(mybitset<32>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<32,int>(bitsetvalue),strlen(mybitset<32,int>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<4,int>(bitsetvalue),strlen(mybitset<4,int>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<8,int>(bitsetvalue),strlen(mybitset<8,int>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<12,int>(bitsetvalue),strlen(mybitset<12,int>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<15,int>(bitsetvalue),strlen(mybitset<15,int>(bitsetvalue))); printf("testing mybitset %s size %ld \n",mybitset<16,int>(bitsetvalue),strlen(mybitset<16,int>(bitsetvalue))); printf("testing mybitset2 16 %s \n",mybitset2<16>(bitsetvalue)); printf("testing mybitset2 15 %s \n",mybitset2<15>(bitsetvalue));
} =================
and the output gets:
$ g++ mybitsetsimple.cpp;./a.out COMPILER VERSION 7.4.0 bitset 32 00000000000000001111001001010101 bitset 16 1111001001010101 bitset 15 111001001010101 testing mybitset 32 testing mybitset 16 testing mybitset 15 111001001010101 testing mybitset 15 111001001010101 testing mybitset size 0 testing mybitset size 0 testing mybitset 0101 size 4 testing mybitset 01010101 size 8 testing mybitset 001001010101 size 12 testing mybitset 111001001010101 size 15 testing mybitset size 0 testing mybitset2 16 testing mybitset2 15 111001001010101
I took the code out of the bigger program and made another small program to show the bug:
======= ======= ======= ======= ======= ==
#include <stdio.h>
#include <cstdlib>
#include <bitset>
#include <strings.h>
#include <string.h>
#include <iostream>
template <const int mysize,class mytype> const char * mybitset(mytype myobj){ return std::bitset< mysize> (myobj) .to_string( ).c_str( ); } mysize> (myobj) .to_string( ).c_str( ); }
template <const int mysize> const char * mybitset2(int myobj){ return std::bitset<
#define bitsetvalue 0x255+0xf000
int main (int argc, char *argv[]) { :bitset< 32>(bitsetvalue ).to_string( ).c_str( )); :bitset< 16>(bitsetvalue ).to_string( ).c_str( )); :bitset< 15>(bitsetvalue ).to_string( ).c_str( )); 32,int> (bitsetvalue) ); 16,int> (bitsetvalue) ); 15,int> (bitsetvalue) ); 15>(bitsetvalue )); 32>(bitsetvalue ),strlen( mybitset< 32>(bitsetvalue ))); 32,int> (bitsetvalue) ,strlen( mybitset< 32,int> (bitsetvalue) )); 4,int>( bitsetvalue) ,strlen( mybitset< 4,int>( bitsetvalue) )); 8,int>( bitsetvalue) ,strlen( mybitset< 8,int>( bitsetvalue) )); 12,int> (bitsetvalue) ,strlen( mybitset< 12,int> (bitsetvalue) )); 15,int> (bitsetvalue) ,strlen( mybitset< 15,int> (bitsetvalue) )); 16,int> (bitsetvalue) ,strlen( mybitset< 16,int> (bitsetvalue) )); 16>(bitsetvalue )); 15>(bitsetvalue ));
printf("COMPILER VERSION %s\n",__VERSION__);
printf("bitset 32 %s \n",std:
printf("bitset 16 %s \n",std:
printf("bitset 15 %s \n",std:
printf("testing mybitset 32 %s \n",mybitset<
printf("testing mybitset 16 %s \n",mybitset<
printf("testing mybitset 15 %s \n",mybitset<
printf("testing mybitset 15 %s \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset %s size %ld \n",mybitset<
printf("testing mybitset2 16 %s \n",mybitset2<
printf("testing mybitset2 15 %s \n",mybitset2<
}
=================
and the output gets:
$ g++ mybitsetsimple. cpp;./a. out 011110010010101 01
COMPILER VERSION 7.4.0
bitset 32 000000000000000
bitset 16 1111001001010101
bitset 15 111001001010101
testing mybitset 32
testing mybitset 16
testing mybitset 15 111001001010101
testing mybitset 15 111001001010101
testing mybitset size 0
testing mybitset size 0
testing mybitset 0101 size 4
testing mybitset 01010101 size 8
testing mybitset 001001010101 size 12
testing mybitset 111001001010101 size 15
testing mybitset size 0
testing mybitset2 16
testing mybitset2 15 111001001010101