# [boost] Mes sources diffèrent de celles de la doc. (Résolu)

## lefta

Bonjour,

/!\ Malgré les apparences au début, ce n'est pas une question de programmation   :Wink:  /!\

Je programme un jeu à mon compte pour le fun, et dans une classe je me sers des bimap de boost. Je peux utiliser la fonction at(), mais pas les crochets [] . Si j'utilise les crochets, le compilo me sort une erreur, qui -viendrait- de boost.

Je suis tombé, à moitié par hasard, sur les sources dans la doc, et voici la différence :

 :Arrow:  Sources de la doc :

```
template< class CompatibleKey >

    data_type_ & operator[](const CompatibleKey& k)

    {

        typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::support::

                      iterator_type_by<Tag,BimapType>::type       iterator;

        typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::support::

                         value_type_by<Tag,BimapType>::type     value_type;

        iterator iter = derived().find(k);

        if( iter == derived().end() )

        {

            iter = derived().insert( value_type(k,data_type_()) ).first;

        }

        return iter->second;

    }
```

 :Arrow:  Sources de portage, vérifiées dans l'archive directement :

```
template< class CompatibleKey >

    data_type_ & operator[](const CompatibleKey& k)

    {

        BOOST_BIMAP_STATIC_ERROR( OPERATOR_BRACKET_IS_NOT_SUPPORTED, (Derived));

    }
```

Alors pourquoi cette fonction a été 'désimplémentée'?

La doc se sert des crochets, et j'ai besoin de pouvoir modifier mon bimap. at() retourne juste une reference constante   :Sad: 

J'ai démasqué boost 1.50 pour tester, mais c'est pareil avec 1.49.

Ma question est donc : d'où celà vient-il? Est-ce modifié par les devs de gentoo? Est-ce une erreur venant de l'équipe de boost? Est-ce voulu ou pas?

(voire si quelqu'un a un moyen de contourner ce problème, je suis preneur, mais je sais que ce n'est pas un forum de prog   :Smile:  )

Merci de vos réponses   :Smile: Last edited by lefta on Sun Aug 12, 2012 12:59 pm; edited 1 time in total

----------

## guilc

Les sources que tu télécharges via portage sont les sources officielles (le tarball). Si patch gentoo il y a, c'est soit dans le sous-dossier "files/" du paquet dans l'arbre de portage, soit si le patchset est plus conséquent, dans un tar à part. L'explication la plus plausible est que ta doc n'est pas à jour, et référence des trucs pour les vieilles version de Boost qui ont depuis été changés pas les devs de Boost !

[EDIT]

Heu, On doit pas regarder au même endroit, parce que chez moi, c'est bon, le code issu de la doc que tu cites est bien présent au bon endroit dans les sources de la 1.49  :Wink: 

----------

## lefta

Waw! Ça c'est de la reponse rapide   :Very Happy: 

Sinon il ne semble pas s'agir d'un patch, puisque le code est prit directement depuis depuis l'archive de sources du dossier distfiles.

Et la doc est bien celle de 1.50, j'ai vérifié : http://www.boost.org/doc/libs/1_50_0/boost/bimap/detail/map_view_base.hpp.

Il me semblait que les sources étaient téléchargées depuis le dépot officiel.

Là j'avouerais que je comprends pas... L'erreur viendrait de boost?

Merci de ta reponse, je crois que vais aller faire un tour sur leurs forums  :Smile: 

----------

## guilc

 *lefta wrote:*   

> Il me semblait que les sources étaient téléchargées depuis le dépot officiel.

 

C'est le cas.

 *Quote:*   

> Là j'avouerais que je comprends pas... L'erreur viendrait de boost?

 

Vu que chez moi ce snippet de code est bien présent (voir mon edit au dessus).... Je penche plutôt pour un simple mésusage de la lib  :Wink: 

----------

## lefta

 :Shocked:   :Shocked:   :Shocked: 

Là je comprends vraiment plus... Je remasque boost 1.50, puisque ça n'a rien à voir avec la 1.49, je supprime les distfiles, je re-sync l'arbre portage, je réinstalle et te tiens au courant  :Smile: 

EDIT : Nan, même après avoir resyncronisé et retéléchargé, c'est toujours la même chose. Mais portage télécharge depuis distfiles.gentoo.org, ou un truc dans le genre. Existe-t-il un moyen de le forcer à télécharger depuis l'URI spécifiée dans l'ebuild?

EDIT 2 : Idem depuis Sourceforge. Tu as eu tes sources depuis Sourceforge? Ça commence à me chauffer cette histoire...    :Evil or Very Mad: 

EDIT3 : Pff c'est bon j'ai compris... Il y a les deux bouts de code dans le fichier, je regardais pas exactement au même endroit. C'est implementé dans la class mutable_... mais pas dans non_mutable_... . Le bout de code qui ne fonctionne pas est ligne 360, l'autre est une quarantaine de lignes avant...

Merci du coup de patte Guilc   :Smile: 

RÉSOLU

----------

## guilc

 *lefta wrote:*   

> EDIT : Nan, même après avoir resyncronisé et retéléchargé, c'est toujours la même chose. Mais portage télécharge depuis distfiles.gentoo.org, ou un truc dans le genre. Existe-t-il un moyen de le forcer à télécharger depuis l'URI spécifiée dans l'ebuild?

 

C'est pareil !

les url "gentoo", c'est juste des miroirs : le principe c'est que les miroirs gentoo vont s'alimenter automatiquement sur la source d'origine décrite dans le SRC_URI. Cela permet d'alléger la charge sur le serveur d'origine. Mais les sources ne sont absolument pas modifiées. Pour preuve : elles ont les mêmes signatures (définies dans les fichiers Manifest).

Si tu tiens absolument à fetcher la source directement depuis le dépôt "officiel", il suffit de définir GENTOO_MIRRORS="". Mais c'est évidemment déconseillé et peu sympathique avec l'hébergement du projet (quand il s'agit de sourceforge, pas de souci, mais si le projet est hébergé sur une petite plateforme et que tout le monde fait ça, c'est pas super sympa...)

 *Quote:*   

> EDIT 2 : Idem depuis Sourceforge. Tu as eu tes sources depuis Sourceforge? Ça commence à me chauffer cette histoire...   

 

Donc cf supra, non, depuis un quelconque miroir gentoo. Si l'ebuild s'installe, c'est que la signature du tarball est correcte, donc que les sources sont conformes à l'original  :Wink: 

 *Quote:*   

> EDIT3 : Pff c'est bon j'ai compris... Il y a les deux bouts de code dans le fichier, je regardais pas exactement au même endroit. C'est implementé dans la class mutable_... mais pas dans non_mutable_... . Le bout de code qui ne fonctionne pas est ligne 360, l'autre est une quarantaine de lignes avant...
> 
> Merci du coup de patte Guilc  
> 
> RÉSOLU

 

Arf  :Smile: 

----------

