Hi Nathan,
On Mon, Aug 16, 2010 at 3:15 PM, Nathan Crookston
On Mon, Aug 16, 2010 at 12:32 PM, Christian Henning
wrote: It works for me now too. Any idea why that is?
Well, apparently the reference type is declared as const somewhere in the GIL code (not the referenced pixel, of course). I tried to find exactly where the const was added in the code, but I had some trouble following all the many metafunction instantiations, etc -- there are quite a few for the declaration given.
I did not think of const since I thought there is gray1_image_t::view_t::const_reference. Turns out there isn't a const_reference. And maybe I got fooled by the MSVC debugger which told me that there is no const in actual type of gray1_image_t::view_t::reference.
I did modify the metafunction slightly to give correct results regardless of const (and volatile) qualifiers. Perhaps it would be of use to you:
//In addition to previous includes #include
namespace boost { namespace gil {
template< typename T > struct bit_field_type_impl { typedef T type; };
template< typename BitField, typename ChannelBitSizes, typename Layout, bool IsMutable > struct bit_field_type_impl< bit_aligned_pixel_reference< BitField , ChannelBitSizes , Layout , IsMutable > > { typedef BitField type; };
template< typename T > struct bit_field_type : bit_field_type_impl
{}; } // namespace gil } // namespace boost
Thanks alot for your code suggestions I'll incorporate them into my code. Regards, Christian