www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - understanding std.algorithm.mutation.fill behaivor.

reply LeqxLeqx <LeqxLeqx protonmail.ch> writes:
Perhaps this is a stupid question, and I apologize if it is, but 
why doesn't this compile:

   import std.algorithm;
   import std.stdio;
   void main()
   {
	  char[] array = [1, 2, 3, 4];
	  char value = 2;
	  fill(array, value);
   }

if this does:

   import std.algorithm;
   import std.stdio;
   void main()
   {
	  int[] array = [1, 2, 3, 4];
	  int value = 2;
	  fill(array, value);
   }

when the only difference is the type, and the 'fill' method is 
meant to be generic?

Thanks for your time.
Dec 27 2016
parent reply Nemanja Boric <4burgos gmail.com> writes:
On Wednesday, 28 December 2016 at 05:09:34 UTC, LeqxLeqx wrote:
 Perhaps this is a stupid question, and I apologize if it is, 
 but why doesn't this compile:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  char[] array = [1, 2, 3, 4];
 	  char value = 2;
 	  fill(array, value);
   }

 if this does:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  int[] array = [1, 2, 3, 4];
 	  int value = 2;
 	  fill(array, value);
   }

 when the only difference is the type, and the 'fill' method is 
 meant to be generic?

 Thanks for your time.
So I don't repeat excellent answer: http://stackoverflow.com/a/6401889/133707
Dec 28 2016
parent reply abad <abad.flt gmail.com> writes:
On Wednesday, 28 December 2016 at 08:10:41 UTC, Nemanja Boric 
wrote:
 On Wednesday, 28 December 2016 at 05:09:34 UTC, LeqxLeqx wrote:
 Perhaps this is a stupid question, and I apologize if it is, 
 but why doesn't this compile:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  char[] array = [1, 2, 3, 4];
 	  char value = 2;
 	  fill(array, value);
   }

 if this does:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  int[] array = [1, 2, 3, 4];
 	  int value = 2;
 	  fill(array, value);
   }

 when the only difference is the type, and the 'fill' method is 
 meant to be generic?

 Thanks for your time.
So I don't repeat excellent answer: http://stackoverflow.com/a/6401889/133707
So in short, unlike in C/C++ world, you should only use char to store actual text, not data as would be common in C/C++. byte & ubyte are for that.
Dec 28 2016
parent LeqxLeqx <LeqxLeqx protonmail.ch> writes:
On Wednesday, 28 December 2016 at 08:27:29 UTC, abad wrote:
 On Wednesday, 28 December 2016 at 08:10:41 UTC, Nemanja Boric 
 wrote:
 On Wednesday, 28 December 2016 at 05:09:34 UTC, LeqxLeqx wrote:
 Perhaps this is a stupid question, and I apologize if it is, 
 but why doesn't this compile:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  char[] array = [1, 2, 3, 4];
 	  char value = 2;
 	  fill(array, value);
   }

 if this does:

   import std.algorithm;
   import std.stdio;
   void main()
   {
 	  int[] array = [1, 2, 3, 4];
 	  int value = 2;
 	  fill(array, value);
   }

 when the only difference is the type, and the 'fill' method 
 is meant to be generic?

 Thanks for your time.
So I don't repeat excellent answer: http://stackoverflow.com/a/6401889/133707
So in short, unlike in C/C++ world, you should only use char to store actual text, not data as would be common in C/C++. byte & ubyte are for that.
I see. That's good to know. Thank you both so much!
Dec 29 2016