problems with std.bitmanip.append (bug?)

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Mar 27 01:43:54 PDT 2015


On Friday, 27 March 2015 at 00:50:34 UTC, Hugo wrote:
> On Thursday, 26 March 2015 at 12:29:03 UTC, John Colvin wrote:
>> 
>> On Thursday, 26 March 2015 at 12:21:23 UTC, Hugo wrote:
>>>
>>> Also, can anyone provide a similar example but using little 
>>> endian order? If only to contrast differences between modes 
>>> of invocation...
>>
>> void main() {
>>   import std.stdio, std.array, std.bitmanip, std.system;
>>   auto buffer = appender!(const ubyte[])();
>>   buffer.append!(ushort, Endian.littleEndian)(261);
>>   assert(buffer.data == [5, 1]);
>>   writefln("%s", buffer.data);
>> }
>> 
>
> Thanks, although it puzzles me that one has to move the type 
> inside the parenthesis and the value after them, otherwise it 
> doesn't compile.
>
> It looks quite irregular, at least to someone like me, more 
> used to function than templates. :(

Think of it as compile-time arguments and run-time arguments. 
First set of parenthesis are compile-time, second are run-time. 
The parenthesis are optional for compile-time arguments iff 
there's only one of them.

> I wish one could simply append a buffer using the concatenation 
> operator, which would be the obvious choice, but it doesn't 
> seem to work for ubytes...

I agree that std.bitmanip often doesn't have the most intuitive 
interface.


More information about the Digitalmars-d-learn mailing list