const_guards 0.1.3

An attribute macro for compile time constraints on const generics
Documentation
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]
extern crate const_guards;
use const_guards::guard;

fn main() {
    let array: &[(); 1] = &[(); 1];
    let _: &() = array.head();
}

trait ArrayHead<T, const N: usize> {
    #[guard(<const N: usize> { N > 0 })]
    fn head(&self) -> &T;
}

impl<T, const N: usize> ArrayHead<T, N> for [T; N] {
    fn head(&self) -> &T {
        &self[0]
    }
}