rust - Implementing Default on nested structures causes a stack overflow -


i found unusual behavior of std::default. if create nested structure default setters , try create highest level struct default parameters, causes stack overflow.

this code compiles, when try run throws thread '<main>' has overflowed stack:

use std::default;  pub struct {     x: i32 }  impl default {     fn default() -> {         { ..default::default() }     } }  fn main() {     let test = { ..default::default() }; } 

but if set defaults of inherited props, works:

use std::default;  pub struct {     x: i32 }  impl default {     fn default() -> {         { x: 0 }     } }  fn main() {     let test = { ..default::default() }; } 

is known issue , should post rust issue tracker? compiler version rustc 1.2.0-nightly (0250ff9a5 2015-06-17).

of course causes stack overflow.

to make clearer, let's change example little:

pub struct {     x: i32,     y: i32, }  impl default {     fn default() -> {         { x: 1, ..default::default() }     } } 

when a { ..default::default() }, are not saying "create me a , execute default::default() each field". means implementation of default not equivalent to:

a { x: 1, y: default::default() } 

it is, in fact, this:

let temp: = default::default(); temp.x = 1; temp 

so yes, causes stack overflow: you've defined default value of a in terms of itself.


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -