Hey, so I'm trying to make an variant array of objects (each one
has an opCall defined) and then call each of them in succession.
It doesn't seem to be working. The error I get is:
"Cannot apply `()' to a value of type `Command!(__lambda1, int)".
I think it's failing when it checks for
On Monday, 26 December 2016 at 04:55:30 UTC, Seb wrote:
Then help to push it forward!!
There are many ways:
- review the PR and point out anything problematic you see
(lack of reviews/interest is a main reason why PRs get stalled)
- post reasons and arguments for merging this PR (seems like
On Saturday, 24 December 2016 at 23:06:25 UTC, Ali Çehreli wrote:
auto c = Command!(fun, Args)(args);
writefln("Created %s", c);
// (3) Workaround: Storing delegates, not Command instances.
return () => c();
Ah, yes. Nice work around :)
Thankies!
On Sunday, 25 December 2016 at 20:11:50 UTC, Seb wrote:
On Sunday, 25 December 2016 at 19:22:10 UTC, aliak wrote:
or is there a way for it to not be so cumbersome to work with?
You might be interested in
https://github.com/dlang/phobos/pull/3915
Yes! That!
Seems like that PR is on a
Hey,
So, been using the programming language swift for a while now,
the optional types[1] they support makes working with maybe-type
(ala haskell) values extremely pleasant.
Does D have anything other than the Nullable template that can be
used to work with optionals, or is there a way for
On Thursday, 14 December 2017 at 15:28:22 UTC, aliak wrote:
int[] rotate(int[] list, int[] lengths) {
auto range = list.cycle;
foreach (skip, length; lengths.enumerate) {
// do stuff to range
}
return list;
}
Ok srsly, I got things to at least compile by changing the
Warning: following has Advent of Code 2017 (day 14 and day 10)
spoilers incase you are doing those challenges. And apologies for
the slightly long post, I'm unsure how much information is needed
here and am a bit clueless. Any help would be much appreciated.
=
Ok, so I'm trying to get
On Thursday, 14 December 2017 at 16:38:26 UTC, Steven
Schveighoffer wrote:
So enumerate returns as its element type a Tuple. Specifically,
it's going to be a Tuple!(size_t, int), since you are
enumerating an array of ints.
I'm not sure why you are having the error, compiling your code
above
On Friday, 15 December 2017 at 01:43:04 UTC, Steven Schveighoffer
wrote:
So the CTFE interpreter doesn't like something to do with your
chain of ranges. This is not totally unexpected, as the CTFE
engine has lots of quirks that make it sometimes puke on valid
CTFE-able code.
:(
At this
Hi, I'm having a bit a trouble doing some compile time parsing.
This works:
immutable str = "he-.llo-the.re";
immutable separators = "-.";
enum a = str.splitter(separators).array;
But this does not:
enum b = str.splitter!(a => separators.canFind(a)).array;
The error is: cannot deduce
Hi,
Having a little trouble understanding lambda type deduction. I
have this lambda:
immutable lambda(T) = (T n) => n * n;
and if I call it with an explicit type it works else it errors
with: lambda cannot deduce function from argument types !()(int)
auto x = lambda!int(2); // ok
auto x =
On Wednesday, 6 December 2017 at 08:10:26 UTC, Biotronic wrote:
On Tuesday, 5 December 2017 at 23:01:43 UTC, aliak wrote:
immutable lambda(T) = (T n) => n * n;
Generally, you'd want to write
alias lambda = n => n * n;
instead. That said, I don't see any reason why your syntax
shouldn't
On Wednesday, 6 December 2017 at 11:02:01 UTC, Jonathan M Davis
wrote:
If you only want one type, then given n that type; I'm pretty
sure that it would be
alias lambda = (int n) => n * n;
if you wanted an int. But if you want to do anything more
complicated with it, it would make more sense
On Monday, 21 May 2018 at 14:19:35 UTC, Steven Schveighoffer
wrote:
On 5/21/18 8:15 AM, SrMordred wrote:
Right, so this should´n be working I think.
struct SomeStruct
{
void foo(int);
}
SomeStruct s;
s.foo = 10;
I thought that only with @property this will work.
That was the plan,
On Monday, 21 May 2018 at 18:53:19 UTC, Jonathan M Davis wrote:
writeln = "foo";
is legal, and it's dumb, but it hasn't mattered much in
practice. So, causing a bunch of code breakage in order to
disallow it is unlikely to go over well. It would also then
make getters and setters
On Tuesday, 22 May 2018 at 13:59:16 UTC, Steven Schveighoffer
wrote:
The derailed plan was to leave alone the ability to call no-arg
functions without parentheses, but to REQUIRE @property to call
an argument-taking function with the assignment style.
See the DIP here:
On Thursday, 24 May 2018 at 23:08:29 UTC, Basile B. wrote:
On Thursday, 24 May 2018 at 23:03:21 UTC, aliak wrote:
Hi,
I was essentially trying to do this:
struct S {
void f() {}
}
auto f = S.f; // f becomes void function(S) ??
S s;
f(s);
Is something like that possible?
Cheers,
- Ali
On Tuesday, 22 May 2018 at 14:33:20 UTC, Jonathan M Davis wrote:
A free function with a single argument works just fine as a
setter property. e.g. you could do something like
void env(Tuple!(string, string)[] str)
{
// set environment variables
}
env = [tuple("foo", "bar")];
is perfectly
On Thursday, 24 May 2018 at 22:03:38 UTC, aliak wrote:
It feels like the only difference between a no-arg function
that is @property and one that is not is that the former could
be invoked with optional parentheses and the latter should be
illegal with parentheses.
Edit: err... other way
Hi,
I was essentially trying to do this:
struct S {
void f() {}
}
auto f = S.f; // f becomes void function(S) ??
S s;
f(s);
Is something like that possible?
Cheers,
- Ali
On Monday, 18 June 2018 at 17:58:11 UTC, Steven Schveighoffer
wrote:
What then can happen is that your local calls can get hijacked
from outside the module, if someone happens to define something
later that you happened to import. D tries to avoid such
possibilities.
There's not much
On Monday, 18 June 2018 at 14:19:30 UTC, Steven Schveighoffer
wrote:
On 6/18/18 7:16 AM, Bastiaan Veelo wrote:
On Sunday, 18 May 2014 at 08:15:08 UTC, Steffen Wenz wrote:
Hi,
Just noticed that using UFCS does not work for nested
functions, and was wondering whether that's intended, and
what
On Monday, 18 June 2018 at 12:48:46 UTC, Steven Schveighoffer
wrote:
On 6/17/18 11:58 PM, Neia Neutuladh wrote:
[...]
Yep, it's a good point. But also not the only way to do this.
If you are returning void, just a goto would work:
[...]
I'm quite a noob when it comes to compiler stuff,
On Sunday, 17 June 2018 at 02:44:38 UTC, Heromyth wrote:
Here is a struct named S:
struct S
{
enum X = 10;
enum Y
{
i = 10
}
enum Z = "str";
struct S {}
class C {}
static int sx = 0;
__gshared int gx = 0;
On Thursday, 7 June 2018 at 21:32:54 UTC, Jonathan M Davis wrote:
struct S
{
int* ptr = new int(42);
}
Is that supposed to compile? -> https://run.dlang.io/is/SjUEOu
Error: cannot use non-constant CTFE pointer in an initializer
&[42][0]
On Monday, 25 June 2018 at 13:37:01 UTC, Mr.Bingo wrote:
One can overload assignment and dispatch so that something like
A.x = ... is valid when x is not a typical member but gets
resolved by the above functions.
Therefore, I can create a member for assignment. How can I
create a member
On Wednesday, 27 June 2018 at 14:01:03 UTC, Alex wrote:
On Wednesday, 27 June 2018 at 12:02:10 UTC, aliak wrote:
===
The use case is for a non-nullable type, where I want to
guarantee that the value inside will never be null. I can't do
it for inner classes though. And I can't allow the user
On Wednesday, 27 June 2018 at 19:28:37 UTC, Timoses wrote:
Can't seem to avoid using mixin in main..
hehe yeah I see, didn't think of trying mixins, worth a shot! It
seems like you had fun at least ;)
On Monday, 25 June 2018 at 15:39:09 UTC, Mr.Bingo wrote:
On Monday, 25 June 2018 at 13:58:54 UTC, aliak wrote:
A.x is translated in to A.opDispatch!"x" with no args. So I
guess you can overload or you can static if on a template
parameter sequence:
import std.stdio;
struct S {
auto
On Monday, 25 June 2018 at 15:06:42 UTC, Steven Schveighoffer
wrote:
On 6/24/18 5:19 PM, aliak wrote:
[...]
No, because the alias is an alias to the function, not the
delegate.
The act of taking the address creates the delegate, where the
delegate's ptr is the context pointer (i.e. s),
On Monday, 25 June 2018 at 18:59:37 UTC, Steven Schveighoffer
wrote:
On 6/25/18 2:51 PM, aliak wrote:
On Monday, 25 June 2018 at 15:06:42 UTC, Steven Schveighoffer
wrote:
I don't see any reason why the alias is to the function and
not the contexted function. I don't see how it's any
Hi, I'm having some issues with template sequence parameters, it
seems they are not typed as delegates inside a template, but are
outside. I.e.
template T(V...) {
alias T = typeof([0]);
}
struct S { void f() {} }
S s;
pragma(msg, T!(s.f)); // void function()
pragma(msg, typeof()); //
On Sunday, 24 June 2018 at 20:33:32 UTC, Rudy Raab wrote:
So I have an XLSX (MS Excel 2007+ file format) library that I
wrote (https://github.com/TransientResponse/dlang-xlsx) that I
recently converted from std.xml to dxml. That went well and it
still works (much faster too).
[...]
I
This currently fails unless you mark the class as static:
auto construct(T)() {
return new T;
}
void main() {
class C {}
auto s = construct!C;
}
So wondering if there's anything that can be done to get the
above working?
Or if there isn't then how could the compiler be enhanced
Hi, trying to figure out how to loop through a string of
characters and then spit them back out.
Eg:
foreach (c; "️") {
writeln(c);
}
So basically the above just doesn't work. Prints gibberish.
So I figured, std.uni.byGrapheme would help, since that's what
they are, but I can't
On Tuesday, 3 July 2018 at 13:32:52 UTC, aliak wrote:
Hi, trying to figure out how to loop through a string of
characters and then spit them back out.
Eg:
foreach (c; "️") {
writeln(c);
}
So basically the above just doesn't work. Prints gibberish.
So I figured,
On Friday, 29 December 2017 at 20:47:44 UTC, Dukc wrote:
On Friday, 29 December 2017 at 19:38:44 UTC, aliak wrote:
So when I'm dealing with ranges, there're a number of times
where I get the front of the returned result of a set of
operations, but of course there is no front so you get an
On Friday, 29 December 2017 at 20:11:03 UTC, Seb wrote:
On Friday, 29 December 2017 at 19:38:44 UTC, aliak wrote:
Hi,
So when I'm dealing with ranges, there're a number of times
where I get the front of the returned result of a set of
operations, but of course there is no front so you get an
On Friday, 29 December 2017 at 20:33:22 UTC, Jonathan M Davis
wrote:
Well, I don't know what you're really doing in code here, but
in general, you'd write your code in a way that it checks empty
and simply doesn't try to do anything with front if the range
is empty.
Yes, ideally, if
On Sunday, 31 December 2017 at 01:03:17 UTC, Tony wrote:
For me, front() should throw a pre-defined exception when
called on an empty range in order to eliminate undefined
behavior. It does take some time to make a check, but D does
array bounds checking by default. Ideally the front() check
On Monday, 25 December 2017 at 14:08:08 UTC, Mengu wrote:
since Point is a Tuple and does not have a constructor that
takes a list of integers (int[]), you should have a helper
function.
Aukay :(
I was kind of hoping for some magical D variadic alias template
on Tuple or something that
On Monday, 25 December 2017 at 14:12:32 UTC, Marc wrote:
Does to!(string)(char[]) do any memory allocation on conversion
or is this similar to a cast or what else?
As said it calls idup, which calls _trustedDup which seems to
call _dup which does memory allocation ->
Hi,
So when I'm dealing with ranges, there're a number of times where
I get the front of the returned result of a set of operations,
but of course there is no front so you get an runtime access
error.
In some other languages the concept of "front" or "first" returns
a safe referece, or
Alo! I'm making a recursive concat function that is similar to
chain. The following code works:
import std.range: isInputRange;
auto concat(R, V...)(R range, V values) if (isInputRange!R) {
import std.range: chain, ElementType;
static if (V.length) {
static if
Hi, been looking for a way to convert an array to a tuple, but
can't seem to find one. Is there one?
Looking for something like:
alias Point = Tuple!(int, "x", int, "y");
enum data = "1,2:8,9";
auto points = data
.split(':')
.map!(a => a
.split(',')
.map!(to!int)
)
.map!Point;
On Monday, 25 December 2017 at 16:38:32 UTC, Thomas Mader wrote:
On Monday, 25 December 2017 at 16:22:11 UTC, Mengu wrote:
is it a relative path? if so:
pragma(msg,
__FILE_FULL_PATH__.split("/")[0..$-1].join("/"));
https://run.dlang.io/is/gRUAD6
Nice idea but it is an absolute path.
On Monday, 8 January 2018 at 23:03:46 UTC, H. S. Teoh wrote:
On Mon, Jan 08, 2018 at 10:59:44PM +, aliak via
Digitalmars-d-learn wrote: [...]
onlineapp.d(61): Error: template std.traits.TemplateOf does
not match any template declaration. And I use it like this:
enum r1Sorted = __traits
On Monday, 8 January 2018 at 23:22:04 UTC, Seb wrote:
On Monday, 8 January 2018 at 23:14:32 UTC, Seb wrote:
Your problem is that `TemplateOf!(int[])` isn't defined. It
should probably be changed to return `void`.
https://github.com/dlang/phobos/pull/6016
Damn that's some fast turnaround!
Hi, trying to write some idiomatic generic D code and I'm a bit
stuck with using the TemplateOf to check if a range is a
SortedRange or not. A bit about the code, I'm basically rewriting
https://dlang.org/library/std/algorithm/setops/set_difference.html but I want to do different things based
It basically steps through in a stride and sets the checkpoints
to false.
C++:
template
void mark(It begin, It end, N step) {
assert(begin != end)
*begin = false;
while (end - begin > step) {
begin = begin + step;
*begin = false;
}
}
For D this is what I figured would be the
On Friday, 26 January 2018 at 14:16:04 UTC, aliak wrote:
range.front = false;
while (!range.empty) {
range.popFrontN(N);
range.front = false;
}
}
Oops, this should be:
while (!range.empty) {
range.front = false;
range.popFrontN(N);
}
On Wednesday, 24 January 2018 at 07:55:01 UTC, thedeemon wrote:
On Tuesday, 23 January 2018 at 00:00:38 UTC, aliak wrote:
[...]
The struct defined inside a scope can mention variables defined
in that scope (e.g. use them in its methods), so it needs a
pointer to the place where those closed
On Thursday, 11 January 2018 at 08:56:11 UTC, ChangLong wrote:
When I try add some sub type for struct with mixin template,
seems there is no way to hidden the private type.
Is there a way to hidden type from mix template like Voldemort
type ?
fake code:
mix template TypeX () {
alias
Hi, so basically is there a way to:
void func(alias pred = null, Range)(Range range) {
// 1) check if pred(ElementType!Range.init,
ElementType!Range.init) is equality
// 2) check if isUnary!pred
// 3) check if isBinary!pred
}
I think maybe the isUnary or isBinary may not work unless it
On Friday, 26 January 2018 at 14:35:25 UTC, Meta wrote:
On Friday, 26 January 2018 at 14:16:04 UTC, aliak wrote:
1) I've seen some phobos code checking for assignability like
this:
is(typeof(range.front = false))
... is that an advantage of that over hasAssignableElements?
Or is that just
On Friday, 26 January 2018 at 14:59:09 UTC, Simen Kjærås wrote:
what is N here? You're declaring it to be an int value in the
template<> definition, and then use it as a type in the
function definition.
Oops again :) Should've been typename N (where N is some integral
type).
Not exactly.
On Tuesday, 30 January 2018 at 09:51:18 UTC, Ali Çehreli wrote:
> [...]
is trying to
> [...]
It's the same with C++: A type with a const member cannot have
a compiler-generated assignment operator.
Ok, that made it obvious :)
'const' as a member function attribute is meaningful: It makes
Hello, I'm trying to write a function called "pull" that, given 2
ranges, "pull"s the values from range 2 out of range 1. I'm not
sure if I'm doing it correctly though, and I have some questions
so any help is appreciated. This is what I have:
ref pull(R1, R2)(return ref R1 r1, R2 r2) {
On Friday, 2 February 2018 at 01:31:15 UTC, Seb wrote:
Are you aware of partial?
https://dlang.org/phobos/std_functional.html#partial
Si si :)
And now I'm thinking, practically, that might be enough. So
thanks for the prod.
To further explain what I mean:
struct A if (!is(this == immutable) && !is(this == shared))
{
}
shared a = A() // error
auto a = A() // ok
immutable a = A() // error
const a = A() // ok
Fake syntax above of course.
I was thinking about this because I read a few posts about const,
and
On Friday, 2 February 2018 at 14:19:37 UTC, aliak wrote:
... (see post in general forum by Simon for details [1])
*Simen
Gah! Sorry!
Is there a way to do this:
import std.stdio;
void main()
{
alias f = (a) => (b) => a * b;
f(2)(3).writeln;
}
Error now is: Error: template lambda has no type
Cheers
On Friday, 26 January 2018 at 23:15:41 UTC, Simen Kjærås wrote:
The function is called fill, and assigns a value to every
element in the range. If a[0] = false compiles, we also want
a.fill(false) to compile. It's simply testing that, rather than
caring about the exact type of the elements.
On Monday, 29 January 2018 at 06:46:26 UTC, Ali Çehreli wrote:
I think the following trivial wrapper around
std.algorithm.remove() should do:
void removeMatching(R, N)(ref R r, N needles) {
import std.algorithm : remove, canFind;
r = r.remove!(e => needles.canFind(e));
}
Haha
On Thursday, 1 February 2018 at 14:28:34 UTC, Simen Kjærås wrote:
--
Simen
Ah, thank you both. For solution and explanation.
Me wonders... are there any thoughts around having functions
return aliases as well? I have no idea if it's even possible but
if it is, then does the initial syntax
On Monday, 29 January 2018 at 13:55:04 UTC, Seb wrote:
On Monday, 29 January 2018 at 11:36:26 UTC, aliak wrote:
On Monday, 29 January 2018 at 06:46:26 UTC, Ali Çehreli wrote:
I think the following trivial wrapper around
std.algorithm.remove() should do:
void removeMatching(R, N)(ref R r, N
On Monday, 29 January 2018 at 12:10:16 UTC, Simen Kjærås wrote:
Consider this case:
immutable(int)[] a = [1,2,3];
immutable(int)* b = [1];
You're free to slice the array or pop elements off its front or
back, but if you change the order of elements, the value that b
points to will change. D
Hi, I'm trying to make a range.front free function that can be
given a defaultValue. Doesn't seem to be working as is written
below, seems like the compiler doesn't see the free function as a
viable candidate. Isn't it supposed to do its UFCS wizardry and
pick up the free func?
import
On Thursday, 8 February 2018 at 19:32:42 UTC, Jonathan M Davis
wrote:
On Thursday, February 08, 2018 08:18:20 aliak via
Digitalmars-d-learn wrote:
On Thursday, 8 February 2018 at 07:16:43 UTC, Jonathan M Davis
wrote:
> It would be a disaster if free functions could override
> member fun
On Wednesday, 7 February 2018 at 20:08:10 UTC, Paul Backus wrote:
You can only call a function with UFCS syntax if the object
you're calling it with does not have a member with the same
name as the function. Both iota's `Result` type and
`FilterResult` have properties named "front", so you
On Thursday, 8 February 2018 at 07:16:43 UTC, Jonathan M Davis
wrote:
It would be a disaster if free functions could override member
functions. For starters, it would be impossible to call the
member function if that were allowed, whereas you can always
call a free function by not using UFCS.
On Thursday, 8 February 2018 at 22:57:04 UTC, Jonathan M Davis
wrote:
D tends to be very picky about what it puts in overload sets in
order to avoid function hijacking - e.g. it doesn't even
include base class functions in an overload set once you've
declared one in a derived class unless you
On Monday, 12 February 2018 at 06:16:21 UTC, rumbu wrote:
writeln(a++) translates to:
A copy = a;
a.opUnary!"++";
writeln(copy);
copy.a[] and a.a[] are the same reference, you increment
a.a[0]/copy.a[0] in opUnary
to make this work you will need a postblit constructor:
struct A
{
On Tuesday, 13 February 2018 at 12:12:30 UTC, Nathan S. wrote:
On Monday, 12 February 2018 at 02:05:16 UTC, aliak wrote:
struct B(T) {
T t;
}
struct A(T) {
T t;
auto opCast(U)() {
return B!U(cast(U)t);
}
}
void main() {
auto a = A!int(3);
auto b = cast(float)a;
From spec: Cast expression: "cast ( Type ) UnaryExpression"
converts UnaryExpresssion to Type.
And https://dlang.org/spec/operatoroverloading.html#cast makes no
mention of the return type of opCast. One could think that the
return type of opCast would be the return type. But it seems it
must
Hi,
Is there a way to get post increment and pre increment working
properly in this scenario?
import std.stdio;
struct A {
int[] a;
this(int a) { this.a = [a]; }
auto opUnary(string op)(){
return A(mixin(op ~ "this.a[0]"));
}
}
void main() {
auto a = A(0);
On Wednesday, 14 February 2018 at 15:14:24 UTC, Meta wrote:
I think the best way to do this is to implement `map` for your
optional type.
Optional!U map(U, alias f)()
{
return empty? no!U : some!U(f(t));
}
Optional!int a = 3;
auto b = a.map!(v => cast(float)v);
assert(is(typeof(b) ==
On Thursday, 15 February 2018 at 00:34:33 UTC, Meta wrote:
On Thursday, 15 February 2018 at 00:27:40 UTC, Meta wrote:
On Wednesday, 14 February 2018 at 23:46:30 UTC, aliak wrote:
On Wednesday, 14 February 2018 at 15:14:24 UTC, Meta wrote:
Ooh yes, of course! Thank you :)
Even better:
On Monday, 19 February 2018 at 01:00:23 UTC, Adam D. Ruppe wrote:
On Monday, 19 February 2018 at 00:42:05 UTC, aliak wrote:
struct B(T) {
T t;
A a;
alias a this;
auto opDispatch(string name)() if (hasMember!(T, name)) {
return mixin("t." ~ name);
Did you perhaps mean
I have a scenario where I'm wrapping functionality for a type,
but only if the contained type has a member. I want those to take
precedence. If the member is not there, then I want to delegate
to an aliases type via alias this.
I get an error here when I call b.p. Even though property p is in
On Tuesday, 20 February 2018 at 11:27:23 UTC, Alex wrote:
There is a related ticket,
https://issues.dlang.org/show_bug.cgi?id=6434
However, not exactly facing this question.
Should that ticket be marked as resolved? The issue is for alias
this to be considered before opDispatch but there were
On Tuesday, 20 February 2018 at 16:12:17 UTC, Adam D. Ruppe wrote:
On Monday, 19 February 2018 at 08:28:22 UTC, aliak wrote:
T is the wrapped type. So if T has a member (in the example
it's the built in field "max") then forward that.
Oh, I see what you mean.
So the problem is that built in
On Monday, 25 December 2017 at 17:59:54 UTC, visitor wrote:
On Monday, 25 December 2017 at 15:03:08 UTC, aliak wrote:
On Monday, 25 December 2017 at 14:08:08 UTC, Mengu wrote:
I was kind of hoping for some magical D variadic alias
template on Tuple or something that will just deconstruct the
On Thursday, 21 December 2017 at 15:59:44 UTC, Steven
Schveighoffer wrote:
Here's a similar solution with an actual range:
https://run.dlang.io/is/gR3CjF
Note, all done lazily. However, the indices must be
sorted/unique.
-Steve
Noice! :D
On Thursday, 21 December 2017 at 00:52:29 UTC, Nicholas Wilson
wrote:
On Thursday, 21 December 2017 at 00:23:08 UTC, Steven
Schveighoffer wrote:
I'm assuming here indices is sorted? Because it appears you
expect that in your code. However, I'm going to assume it
isn't sorted at first.
auto
Hi, is there a way to remove a number of elements from an array
by a range of indices in the standard library somewhere?
I wrote one (code below), but I'm wondering if there's a better
way?
Also, can the below be made more efficient?
auto without(T, R)(T[] array, R indices) if
On Monday, 1 January 2018 at 04:18:29 UTC, Ali Çehreli wrote:
If you're fine with specifying the function as a template
argument, the following works. (As seen with 's => s.foo()'
below, you have to use a lambda for member functions anyway.)
Ali
Nice! Thanks :) And I think your usage for
On Monday, 1 January 2018 at 02:18:36 UTC, Jonathan M Davis wrote:
Except that the reason for arrays throwing RangeErrors when you
try and index them out-of-bounds is to avoid memory safety
issues, which is not necessarily the case at all when you're
talking about ranges. Having ranges in
On Sunday, 31 December 2017 at 13:47:32 UTC, Adam D. Ruppe wrote:
On Sunday, 31 December 2017 at 13:32:03 UTC, aliak wrote:
So it seems it tries to compile the statements below the check
on V.length even though it's guaranteed to be true and there's
a return statement inside the if.
Yeah,
On Monday, 18 June 2018 at 19:26:47 UTC, Steven Schveighoffer
wrote:
On 6/18/18 2:58 PM, aliak wrote:
[...]
It's the same in the fact that your call is silently switched
to a different call. However, in the current syntax, an
external entity CANNOT override a local function. When you call
Hi
Is there a way to tell if an alias is to a template?
I'm writing some algorithms and I need to distinguish between a
binary predicate that provides "less than" and one that provides
"equal to" semantics. So I have these two templates:
template eq(alias pred) {
alias eq = pred;
}
On Friday, 27 July 2018 at 14:38:27 UTC, Steven Schveighoffer
wrote:
On 7/27/18 9:29 AM, aliak wrote:
Ok, thanks to Simen from another post [0], I just figured out
what the correct constructor and factory method for a template
wrapper should be:
https://run.dlang.io/is/S4vHzL
struct W(T) {
On Friday, 27 July 2018 at 14:52:20 UTC, Steven Schveighoffer
wrote:
On 7/23/18 2:39 PM, aliak wrote:
Hi,
I'm playing around with an Optional wrapper type. It stores a
type T and a bool that defines whether a value is defined or
not:
struct Optional(T) {
T value;
bool defined =
On Friday, 27 July 2018 at 14:34:54 UTC, Steven Schveighoffer
wrote:
The problem here is that inout(immutable(int)) is equivalent to
immutable(int).
That is, all flavors of mutability are equivalent to
immutable(int):
/*mutable*/(immutable(int)) => immutable(int)
const(immutable(int))
On Monday, 30 July 2018 at 18:47:06 UTC, Alex wrote:
On Monday, 30 July 2018 at 18:30:16 UTC, aliak wrote:
Is this a bug?
If not is there a workaround?
I would like for the alias this to function as a normal A type
unless B specifically disables certain features, but it seems
weird that
On Monday, 30 July 2018 at 20:20:15 UTC, Alex wrote:
On Monday, 30 July 2018 at 19:33:45 UTC, aliak wrote:
On Monday, 30 July 2018 at 18:47:06 UTC, Alex wrote:
On Monday, 30 July 2018 at 18:30:16 UTC, aliak wrote:
[...]
What happens if you omit the @disable line?
Compiles ok then.
So...
Is this a bug?
If not is there a workaround?
I would like for the alias this to function as a normal A type
unless B specifically disables certain features, but it seems
weird that disabling one opAssign disables all of them inside the
aliases type but not in the aliasing type?
struct A {
On Monday, 30 July 2018 at 20:38:33 UTC, aliak wrote:
On Monday, 30 July 2018 at 20:20:15 UTC, Alex wrote:
On Monday, 30 July 2018 at 19:33:45 UTC, aliak wrote:
On Monday, 30 July 2018 at 18:47:06 UTC, Alex wrote:
On Monday, 30 July 2018 at 18:30:16 UTC, aliak wrote:
[...]
What happens if
On Sunday, 29 July 2018 at 12:30:58 UTC, Steven Schveighoffer
wrote:
On 7/28/18 6:06 PM, aliak wrote:
[...]
What I meant was that string is actually mutable (the data
isn't mutable, but the string can be re-assigned to another
one), so Optional!string is more useful than
On Monday, 30 July 2018 at 20:54:28 UTC, Simen Kjærås wrote:
On Monday, 30 July 2018 at 18:30:16 UTC, aliak wrote:
Is this a bug?
If not is there a workaround?
I would like for the alias this to function as a normal A type
unless B specifically disables certain features, but it seems
weird
1 - 100 of 292 matches
Mail list logo