Re: Incorrect compiler warning C4267
On Feb 8, 8:19 am, Number 774 <Number...@discussions.microsoft.com>
wrote:
I'm running VS 2005, configured for 32 bit with 64 bit warnings on. This bit
of code
#include <vector>
#include <list>
std::vector<size_t> vs;
std::list<unsigned int> uiList;
unsigned int ui = uiList.front();
results in a compiler warning at the last line
warning C4267: 'initializing' : conversion from 'size_t' to 'unsigned int',
possible loss of data
uiList.front()'s data type should be reference to unsigned int, so it ought
to compile fine.
It does compile fine if either (a) you don't declare the vector at line 3 or
(b) the type of the list and variable are int, not unsigned int.
I reckon this is a compiler bug. Can I have people's thoughts on that - not
least where I formally report it?
Thx
Your list is empty and you are attempting to access an element that
doesn't exist.
What warnings or errors you get is irrelevent. Its undefined
behaviour.
Try as follows:
#include <iostream>
#include <ostream>
#include <list>
int main()
{
std::list< unsigned > uiList(10, 1);
unsigned ui = uiList.front();
std::cout << ui << std::endl;
}